51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

在Web服务端,如何防止SQL注入和XSS攻击,请结合360安全产品的安全特性,说明具体实现方法。

360Web服务端开发工程师难度:中等

答案

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) 【示例】

  • SQL注入示例:用户输入“' or 1=1 --”,参数化查询处理:
    PreparedStatement ps = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
    ps.setString(1, userInput); // userInput为用户输入
    ResultSet rs = ps.executeQuery();
    
  • XSS示例:用户输入“<script>alert(1)</script>”,输出编码处理:
    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) 【追问清单】

  • 360WAF如何检测SQL注入?
    回答要点:通过行为分析(如异常SQL结构)、特征库(已知注入模式)、参数化检测(识别未使用参数化查询的请求)。
  • 如何处理动态生成的页面中的XSS?
    回答要点:使用上下文分析(结合页面上下文判断输入是否为脚本),结合内容编码和输入过滤。
  • 如果遇到第三方库的SQL注入漏洞,如何处理?
    回答要点:使用依赖扫描工具(如360依赖扫描)检测漏洞,及时更新库版本,同时结合输入验证和参数化查询。
  • 输入验证工具的白名单和黑名单如何选择?
    回答要点:白名单更严格(只允许特定字符),黑名单更宽松(过滤常见危险字符),根据业务需求选择,比如用户名允许字母数字和下划线,过滤特殊字符。
  • 参数化查询是否完全防止SQL注入?
    回答要点:如果实现不当(如手动拼接SQL),可能绕过,需确保所有数据库操作都使用参数化查询,避免手动拼接。

7) 【常见坑/雷区】

  • 只说参数化查询,忽略输入验证:比如认为只要用参数化查询就足够,但未过滤用户输入中的特殊字符,可能导致其他攻击(如命令注入)。
  • 只说输出编码,忽略输入过滤:比如只对输出内容编码,但用户输入包含恶意脚本,直接传递到数据库或存储型XSS。
  • 认为360产品是唯一方案:比如只提360WAF,忽略基础的安全编码规范(如输入验证、参数化查询),显得不全面。
  • 混淆SQL注入和命令注入:比如回答时将SQL注入和命令注入混淆,比如认为命令注入是SQL注入的一种,其实命令注入是注入操作系统命令。
  • XSS防护只提编码,忽略上下文分析:比如只说输出编码,但未考虑动态生成的页面中,上下文分析(如判断输入是否在脚本标签内)的重要性,可能导致存储型XSS。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1