加载中...
SQL 注入是攻击者将恶意 SQL 代码混入用户输入,使后端数据库执行非预期查询的攻击手法。自 1998 年被正式描述以来,始终是 Web 应用最高频、危害最深的漏洞之一。

| 首次公开描述 | 1998 年 Phrack 杂志第 54 期 |
| OWASP 2021 排名 | A03 注入 |
| 自动化工具 | sqlmap(2009 年开源) |
典型场景:登录表单用户名字段输入 ' OR '1'='1,若代码直接拼接 SQL 字符串,查询就变成了永真条件,绕过密码验证。这是最朴素的「经典注入」。
按数据回显方式,注入分为三类:
2009 年,工具 sqlmap 开源,极大降低了实施 SQL 注入的门槛,也推动了各大框架加速默认启用参数化查询。[1]
预编译语句(Prepared Statements)是根本性防御:驱动层先发送 SQL 结构再发送数据,数据永远不会被解析为指令。Java 的 PreparedStatement、Python 的 psycopg2 占位符、PHP 的 PDO 均是正确姿势。
但要注意:动态拼接表名或列名无法参数化,必须用白名单校验。存储过程若内部仍做字符串拼接,同样有注入风险。ORM 框架的「原生查询」接口(如 Hibernate 的 createNativeQuery)被错误使用时也会出问题。
2011 年索尼 PlayStation Network 泄露 7700 万用户数据,调查报告明确指出根因是未做参数化处理的 SQL 查询——这次事件推动了全行业重新审视 SQL 注入的危害等级。

| 首次公开描述 | 1998 年 Phrack 杂志第 54 期 |
| OWASP 2021 排名 | A03 注入 |
| 自动化工具 | sqlmap(2009 年开源) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧