SQL 注入
SQL 注入是一种针对与数据库关联的网站和Web 应用程序的网络攻击。这些攻击利用配置不当的网站和数据库服务器软件,诱使服务器解析本来不会执行的SQL语句。这些攻击可能会泄露敏感的个人和财务信息,使攻击者能够更改或删除数据库中存储的信息,或获得其他未经授权的访问权限。
当网站接受用户在文本表单中的输入,并将其作为 SQL查询的一部分时,该网站就容易受到 SQL 注入攻击。攻击者不会在表单字段中填写预期的信息例如(用户名),而是输入一段能够修改 SQL 查询的文本字符串。例如,假设某个查询可能以SELECT UserID, Name, Password FROM Users WHERE UserID = 开头,后面接着用户 ID 表单字段中的输入。如果用户输入自己的用户 ID,查询就会按预期运行,并显示其信息。
但是,如果服务器不加限制地将输入文本插入查询,攻击者就可以利用这一点修改 SQL 查询语句本身。如果某人输入的不是用户 ID,而是文本317 OR 1=1,查询就会变成SELECT UserID, Name, Password FROM Users WHERE UserID = 317 OR 1=1;。由于OR 1=1的结果始终为真,它会覆盖用户 ID 条件;查询转而返回 Users 表中所有记录的用户 ID、姓名和密码。其他类型的代码注入可能允许攻击者以网站管理员身份登录,从数据库中删除记录或表,或者(在某些极端情况下)注入并运行 shell脚本及其他代码。
网站管理员可以通过及时更新服务器软件来防止 SQL 注入攻击。此外,还应通过限制输入文本或过滤掉某些字符来“清理”数据库输入。网站管理员还可以对 SQL 查询进行参数化——在查询中使用指向用户输入的占位符,而不是将用户输入直接插入查询。
测试你的知识