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

在开发就业信息平台的Web应用时,如何避免常见的安全漏洞(如SQL注入、XSS、CSRF),请举例说明具体的编码实践和工具使用。

南京理工大学就创中心网络安全与信息化研究岗(京外生源)难度:中等

答案

1) 【一句话结论】通过输入验证、参数化查询、内容编码、CSRF令牌等编码实践,结合静态/动态安全工具(如SonarQube、OWASP ZAP),可系统性防范SQL注入、XSS、CSRF等常见Web安全漏洞。

2) 【原理/概念讲解】老师可以解释每个漏洞的原理,避免空话:

  • SQL注入:当用户输入未被正确转义或过滤时,恶意SQL代码会注入到数据库查询中,导致数据泄露或修改。类比:就像在厨房做饭时,把“坏调料”混进食材里,导致整锅菜都变“坏”。
  • XSS(跨站脚本):恶意脚本被注入到网页中,当其他用户访问时执行,可能窃取cookie或进行会话劫持。类比:在公共论坛里贴了“坏链接”,别人点开后自己的电脑被控制。
  • CSRF(跨站请求伪造):攻击者伪造用户请求,利用用户已登录的会话,执行非授权操作。类比:你正在网上购物,攻击者发给你一个链接,点击后帮你下单了。

3) 【对比与适用场景】

漏洞类型定义常见场景核心解决方法注意点
SQL注入用户输入绕过验证,注入恶意SQL代码到数据库查询用户注册/登录/搜索等涉及数据库查询的接口参数化查询(预编译语句)处理空值、参数类型(如setString/setInt),不同数据库差异
XSS恶意脚本注入网页,在用户浏览器执行用户评论、个人资料等用户可输入内容的页面输出编码(HTML实体编码)防止DOM型攻击,需结合CSP
CSRF攻击者伪造用户请求,利用已登录会话用户提交表单、修改设置等涉及会话的接口CSRF令牌(随机令牌)+ 同源策略GET请求不使用令牌,POST必须;验证请求来源Referer

4) 【示例】

  • JSON数据安全处理:用户输入JSON,用Jackson验证结构并脱敏敏感字段。
    ObjectMapper mapper = new ObjectMapper();
    try {
        mapper.validate(jsonData); // 验证JSON结构合法性
        JsonNode node = mapper.readTree(jsonData);
        if (node.has("password")) {
            node.remove("password"); // 脱敏密码字段
        }
    } catch (JsonProcessingException e) {
        // 处理无效JSON
    }
    
  • 参数化查询处理空值:
    String sql = "SELECT * FROM users WHERE username = ? AND email = ?";
    PreparedStatement stmt = connection.prepareStatement(sql);
    stmt.setString(1, username);
    stmt.setNull(2, Types.VARCHAR); // email为空时设置null
    ResultSet rs = stmt.executeQuery();
    
  • CSRF验证流程:
    前端生成token(如UUID),存入session,表单提交时携带token,后端验证:
    // 前端
    <form action="/change-password" method="post">
        <input type="hidden" name="csrf_token" value="${session.csrfToken}">
        <!-- 其他表单字段 -->
    </form>
    
    // 后端
    String token = request.getParameter("csrf_token");
    if (token == null || !token.equals(session.getAttribute("csrfToken"))) {
        // 请求伪造,拒绝
    }
    

5) 【面试口播版答案】
面试官您好,针对Web应用开发中的常见安全漏洞,核心是通过编码实践和工具辅助实现防御。首先SQL注入,关键是用参数化查询(预编译语句),比如Java的PreparedStatement,将用户输入作为参数传递,避免SQL结构被篡改。比如用户输入' or '1'='1,参数化查询会将其作为字符串处理,不会执行恶意SQL。然后XSS,核心是输出编码,比如将用户输入的<script>转为&lt;script&gt;,防止浏览器执行脚本。比如用户评论<script>alert('xss')</script>,输出后变成文本。接着CSRF,使用CSRF令牌,比如在表单中添加随机生成的token,后端验证是否与用户会话匹配。另外,对复杂输入(如JSON)用Jackson验证格式,确保数据合法。工具方面,用SonarQube配置SQL注入检测规则,或用OWASP ZAP动态测试。这样多维度防范,降低漏洞风险。

6) 【追问清单】

  • 问题1:参数化查询在处理空值时如何实现?
    回答要点:使用PreparedStatement的setNull方法,指定参数类型和SQL类型,确保空值正确传递。
  • 问题2:如何防范XSS的DOM型攻击?
    回答要点:除了HTML实体编码,可结合内容安全策略(CSP),限制资源加载,如Content-Security-Policy: default-src 'self'。
  • 问题3:CSRF防御中除了令牌,还需检查什么?
    回答要点:验证请求的HTTP方法(如GET请求不使用CSRF令牌,POST请求必须),以及请求来源的Referer头是否与用户会话的来源一致。
  • 问题4:如何处理用户输入的JSON数据?
    回答要点:使用JSON解析库(如Jackson)的验证功能,检查JSON结构合法性,并脱敏敏感字段(如密码)。
  • 问题5:静态代码扫描工具SonarQube如何配置SQL注入检测?
    回答要点:在项目配置文件中添加规则集,如org.sonar.sqale.sqrl.sql_injection,并定期扫描代码。

7) 【常见坑/雷区】

  • 过滤XSS而非编码:只过滤<script>标签,但忽略其他脚本注入方式(如onerror事件)。
  • 忽略CSRF同源策略:只使用token,未检查请求来源是否与登录页面一致,导致跨域CSRF攻击。
  • SQL注入只做前端验证:认为前端过滤后端就安全,未使用参数化查询,导致后端仍受攻击。
  • 使用不安全的框架默认配置:比如Spring框架默认未开启XSS过滤,需要手动配置安全拦截器。
  • 忽略会话管理:未使用HTTPS传输会话,导致会话ID被窃取,引发会话劫持。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1