
1) 【一句话结论】在Web服务端,通过输入验证(白名单/黑名单)+ 参数化查询(防SQL注入)+ 内容编码(防XSS),结合360 Web应用防火墙(WAF)的SQL注入/XSS防护规则、输入验证工具,实现安全防护。
2) 【原理/概念讲解】老师口吻:先讲SQL注入——当用户输入包含SQL代码时(如“' or 1=1 --”),数据库会执行恶意SQL,篡改查询结果。解决方案是参数化查询(预编译语句),将SQL结构和参数分离(类比“填空题”:题目是“SELECT * FROM users WHERE id = ?”,用户填“1”,数据库只执行“id=1”,不会执行“1=1 --”)。再讲XSS——用户输入包含JavaScript脚本(如“<script>alert(1)</script>”),在页面渲染时执行。解决方案是内容编码(HTML实体化),将特殊字符转为实体(如“<”转“<”),脚本被转义后无法执行(类比“给文本加翻译”,防止被误解为代码)。360安全特性方面,360WAF提供SQL注入防护(基于行为分析、特征库、参数化检测),XSS防护(基于内容编码、上下文分析);输入验证工具(如360输入验证SDK)提供输入白名单过滤,确保输入符合预期格式。
3) 【对比与适用场景】
| 攻击类型 | 定义 | 原理 | 常用防护技术 | 适用场景 | 注意点 |
|---|---|---|---|---|---|
| SQL注入 | 恶意注入SQL代码,篡改数据库操作 | 用户输入被当作SQL代码执行 | 参数化查询(预编译)、白名单过滤 | 数据库操作接口、用户输入验证 | 需确保参数化查询正确实现,避免绕过 |
| XSS | 注入恶意脚本,在页面执行 | 用户输入被当作HTML/JS执行 | 内容编码(输出)、输入过滤(输入)、上下文分析 | 用户生成内容(UGC)、动态页面 | 需区分存储型/反射型XSS,分别处理 |
4) 【示例】
PreparedStatement ps = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
ps.setString(1, userInput); // userInput为用户输入
ResultSet rs = ps.executeQuery();
response.getWriter().write(escapeHtml(userInput)); // escapeHtml为360输入验证工具的函数
5) 【面试口播版答案】
面试官您好,针对SQL注入和XSS攻击的防护,核心思路是通过输入验证+参数化查询(防SQL注入)+内容编码(防XSS),结合360的安全产品实现。首先,SQL注入是用户输入被当作SQL代码执行,比如输入“' or 1=1 --”会绕过验证查询所有用户。解决方法是使用参数化查询(预编译语句),将SQL结构和参数分离,比如SELECT * FROM users WHERE id = ?,参数作为数据传递,数据库不会执行参数中的代码。然后是XSS,用户输入包含脚本,比如<script>alert(1)</script>,在页面渲染时执行。解决方法是输出内容编码(HTML实体化),将特殊字符转为实体,比如“<”转为“<”,脚本被转义后无法执行。360方面,360 Web应用防火墙(WAF)提供SQL注入防护(基于行为分析和特征库检测),XSS防护(基于内容编码和上下文分析);还有输入验证工具(如360输入验证SDK),提供输入白名单过滤,确保输入符合预期格式,比如只允许字母数字,过滤特殊字符。这样结合基础技术和360产品,能有效防止SQL注入和XSS攻击。
6) 【追问清单】
7) 【常见坑/雷区】