← SEARCHABLE ARCHIVE
Web · 2026-07-14

什么是 SQL 注入攻击?

用户输入如何变成SQL命令?

INTERACTIVE READING MODE →

该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。

如果网站将用户输入粘贴到 SQL 语句中,则用户可以输入 SQL 语法而不是数据。 此漏洞称为 SQL 注入。

常见的SQL攻击通常指的是SQL注入。 准确地说,针对使用SQL的系统的攻击是一个更广泛的术语,代表性的输入攻击是SQL注入。

按原样组合字符串时出现的问题

假设您创建的登录代码如下:

const sql =
    "SELECT * FROM users WHERE name = '" + userName +
    "' AND password = '" + password + "'";

当收到正常输入时,将创建以下 SQL。

SELECT * FROM users
WHERE name = 'rose' AND password = '1234';

但是,如果用户输入中包含引号和 SQL 运算符,则开发人员想要的句子结构可能会发生变化。

' OR 1=1 --
SELECT * FROM users
WHERE name = '' OR 1=1 -- ' AND password = '';

1=1总是正确的,--后者可以注释掉。 原本只应被视为数据的字符串已成为 SQL 命令的一部分。

它会造成什么损害?

尽管 SQL 注入是可能的,但同样的损害并不总是发生。 结果根据您运行的数据库类型、帐户权限以及可以立即执行的语句范围而有所不同。

不过,一般来说,可能会出现以下问题:

  • 绕过登录检查。
  • 阅读其他用户的个人信息。
  • 更改或删除帖子或帐户信息。
  • 使用错误消息来确定数据库结构。
  • 如果数据库帐户权限太高,破坏的范围就会变大。

仅靠前端检查无法预防这种情况。

您可以认为它是安全的,因为您的浏览器阻止输入引号。 但是,攻击者可以直接向服务器发送 HTTP 请求,而无需通过浏览器屏幕。

因此,输入长度限制和屏幕检查仅有助于可用性。 真正的防御必须在运行SQL的服务器上完成。

SQL注入的核心原因并不是单一的特殊字符。 根本问题是将用户数据和 SQL 命令混合到一个字符串中。