
1) 【一句话结论】:SQL注入通过用户输入绕过Web验证执行恶意SQL,XSS通过注入脚本在用户浏览器执行,360官网需重点测试搜索、登录、用户评论等输入点的风险,测试策略需覆盖参数化验证、数据库盲注、错误信息分析及CSP/CORS配置验证。
2) 【原理/概念讲解】:老师先讲SQL注入:“SQL注入的核心是Web应用将用户输入直接拼接进SQL查询语句,导致恶意SQL逻辑被执行。举个简单例子,假设官网登录接口的SQL是SELECT * FROM users WHERE username=? AND password=?,正常输入admin和123会查询匹配记录。但如果用户名输入' or '1'='1 --,SQL语句变成SELECT * FROM users WHERE username='' or '1'='1 --' AND password='123',--注释掉条件,结果总为真,绕过验证。防御上用参数化查询,把用户输入当作参数传递,数据库处理时不拼接SQL,比如SQL变成SELECT * FROM users WHERE username=? AND password=?,参数' or '1'='1 --'被当作字符串,不会执行恶意逻辑。” 然后讲XSS:“XSS(跨站脚本)是用户输入的恶意脚本被浏览器执行。比如官网搜索框,输入<script>alert('360被黑了')</script>,其他用户访问搜索结果页时,脚本在浏览器执行,弹出警告。防御用输出编码(把<转<等)或内容安全策略(CSP)限制资源加载。比如搜索结果页的HTML是<div>${searchTerm}</div>,正常输入hello显示hello,输入脚本会被转义成<script>alert(1)</script>,浏览器不执行。”
3) 【对比与适用场景】
| 攻击类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| SQL注入 | 恶意构造SQL语句绕过Web验证,执行恶意数据库查询 | 直接修改数据库内容,绕过身份验证 | 登录、搜索、用户信息查询等涉及数据库的接口 | 需数据库权限,防御需参数化查询/预编译 |
| XSS | 用户输入的脚本被浏览器执行,在用户端运行 | 获取会话、窃取数据、篡改页面 | 搜索结果、用户评论、登录弹窗等用户可见的输入输出 | 不需权限,防御需输出编码+CSP |
4) 【示例】
http://360.cn/login?username=admin' or '1'='1&password=123,正常admin验证失败,输入' or '1'='1后,SQL绕过,返回登录成功页面。<img src=x onerror=alert(1)>,搜索结果页显示时,浏览器执行onerror事件中的脚本,弹出警告。5) 【面试口播版答案】:“SQL注入是用户输入被直接拼接进SQL语句,导致恶意查询执行,比如登录时输入' or '1'='1 --绕过验证。防御用参数化查询。XSS是注入脚本在用户浏览器执行,比如搜索框输入<script>alert('xss')</script>。针对360官网,测试重点在搜索框、登录表单、用户评论等输入点,策略包括:1. 用Burp Suite抓取登录接口请求,修改用户名/密码为' or '1'='1 --,看是否绕过验证(如返回登录成功);2. 检查数据库(如用户列表、日志)是否有新增用户(验证SQL注入是否成功);3. 测试XSS时,输入反射型(搜索结果页)和存储型(评论),看脚本是否执行,验证CSP是否生效(如Content-Security-Policy: default-src 'self'; script-src 'self';)。”
6) 【追问清单】
username=admin' and if(ascii(substring(database(),1,1))=97, sleep(5), 1)--)或布尔盲注,观察响应时间变化。Content-Security-Policy字段,或输入受CSP限制的脚本(如<script src=evil.com>),看是否被阻止。7) 【常见坑/雷区】
system('ls')),SQL注入执行SQL,需明确区分。