SQL面试题更新 2026-08-05

在编写 SQL 语句时,可以采取哪些具体措施来防止 SQL 注入攻击?请列举并解释几种常见的防护手段。

安全意识技术原理SQL

考察说明

考查候选人对 SQL 注入原理及防御措施的理解。

回答思路

  1. 【回答框架 1】SQL 注入的核心是攻击者通过拼接 SQL 语句,将恶意代码作为输入数据传入,从而改变原有 SQL 语义。避免注入的关键在于区分代码和数据,确保用户输入不被当成可执行 SQL 代码。
  2. 【回答框架 2】参数化查询(PreparedStatement)是最主要的防御手段。将 SQL 结构预先编译,输入作为参数传入,数据库引擎不会将参数内容当作 SQL 指令执行,从而根除注入可能。
  3. 【回答框架 3】使用存储过程可以提高安全性,但需注意存储过程内部的动态 SQL 仍需参数化,否则同样存在注入风险。
  4. 【回答框架 4】输入验证和转义是辅助措施,例如对用户输入进行白名单校验、限制长度、过滤危险字符,但转义不彻底时可能被绕过,不能作为唯一防线。
  5. 【回答框架 5】最小权限原则和数据库配置安全也很重要:为应用分配只具备必要权限的数据库账号,关闭错误信息展示,减少攻击面。
  6. 【关键点 1】参数化查询是防止 SQL 注入最有效的手段。
  7. 【关键点 2】存储过程内部动态 SQL 需参数化,否则仍有风险。
  8. 【关键点 3】输入验证和转义只能作为辅助,不能替代参数化。
  9. 【关键点 4】最小权限原则降低注入成功后的影响。
  10. 【关键点 5】避免拼接 SQL,使用 ORM 时也应使用其参数化机制。
  11. 【易错点 1】仅依赖输入过滤或转义,可能因攻击变种(如编码绕过)而失效。
  12. 【易错点 2】存储过程若使用动态拼接 SQL,同样会引入注入风险。
  13. 【易错点 3】ORM 框架若使用原生拼接查询,也不能避免注入。