首页/安全/渗透测试与安全评估速查/SQL 注入修复视角:参数化查询
常见漏洞验证121 条

SQL 注入修复视角:参数化查询

参数化查询(预编译)让数据与语句结构分离,是根治注入的手段;无法参数化的排序、表名等位置必须用白名单映射。

根治手段占位符绑定参数(? 或命名占位符)
例外位置表名/列名/排序方向用白名单映射
复查点ORM 原生 SQL、拼接的分页与动态条件

修复示意(以伪代码说明结构)

修复示意(以伪代码说明结构)
不安全:语句 = 'SELECT * FROM orders WHERE id = ' + 用户输入
安全:  语句 = 'SELECT * FROM orders WHERE id = ?',以参数绑定用户输入

动态排序:
不安全:ORDER BY ' + 用户输入
安全:ORDER BY 白名单映射表[用户输入](仅映射到固定列名)
字符串转义与黑名单过滤只能作为临时缓解,不能替代参数化;换数据库方言时过滤规则往往失效。

易错点

  • ORM 的 raw/execute 拼接仍然可注入,要逐个复查
  • 存储过程内部的动态 SQL 同样需要参数化

数据来源与参考

  • OWASP Cheat Sheet Series:SQL Injection Prevention
  • CWE-89
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌