Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 1207

SQL 注入

审核人Cybersecurity entrepreneur & security researcher

SQL 注入 是什么?

SQL 注入一种代码注入攻击,将攻击者控制的 SQL 语句植入数据库查询,以读取、篡改或破坏数据。


SQL 注入(SQLi)利用了将不可信输入拼接到 SQL 语句、而非使用参数化查询的应用程序。通过注入引号、注释或 UNION 子句,攻击者可改写预期查询,从而导出数据表、绕过认证、提升权限或运行数据库命令。其变种包括经典的内联(in-band)注入、基于错误的注入、布尔/时间型盲注(从响应或响应延迟中逐位推断数据),以及二阶注入——存储的输入在后续被复用时触发。

SQLi 已有数十年历史,但至今仍具毁灭性。CVE-2023-34362 是 Progress MOVEit Transfer 中的一个 SQL 注入零日漏洞,自 2023 年 5 月下旬起被 Cl0p 勒索软件团伙利用:未经认证的攻击者注入 SQL 以部署 LEMURLOOT Web Shell 并窃取数据库内容,波及数千家下游组织。2015 年的 TalkTalk 数据泄露事件暴露了约 157,000 条客户记录,同样是针对一个遗留网页的 SQL 注入。SQLi 归属于 OWASP Top 10 A03:2021(注入)。

首要的防御手段是参数化查询/预编译语句,它将代码与数据分离,使输入永远无法改变查询结构。再辅以安全使用的 ORM 框架、白名单式输入验证、最小权限的数据库账户(应用登录账户不具备 DBA 权限)、存储过程的规范使用,以及作为纵深防御的 WAF。仅靠手动转义既脆弱又不被推荐。

flowchart TD
  U["不可信输入"] --> C{"查询如何构建?"}
  C -->|"字符串拼接"| I["' OR 1=1 -- 被注入到 SQL 中"]
  I --> DB[("数据库执行攻击者的 SQL")]
  DB --> X["数据转储 / 绕过认证"]
  C -->|"参数化查询"| S["输入作为数据而非代码绑定"]
  S --> OK["查询结构得以保留 — 安全"]

示例

  1. 01

    在登录表单中输入 ' OR '1'='1 返回第一条用户记录并绕过认证。

  2. 02

    报表接口的某个参数被精心构造,触发 UNION SELECT 以窃取密码哈希。

常见问题

SQL 注入 是什么?

一种代码注入攻击,将攻击者控制的 SQL 语句植入数据库查询,以读取、篡改或破坏数据。 它属于网络安全的 攻击与威胁 分类。

SQL 注入 是什么意思?

一种代码注入攻击,将攻击者控制的 SQL 语句植入数据库查询,以读取、篡改或破坏数据。

如何防御 SQL 注入?

针对 SQL 注入 的防御通常结合技术控制与运营实践,详见上方完整定义。

SQL 注入 还有哪些其他名称?

常见的别称包括: SQLi。

相关术语

另见