徐老师写的这篇文章《SQL 注入攻击》,借鉴学习下。
SQL注入攻击是一种常见的数据库攻击方法,本文将介绍SQL注入攻击,如何对其进行检测,及如何预防。
什么是SQL注入攻击?
通常情况下,SQL注入攻击通过应用程序的输入数据实施。例如,应用程序将用户输入的用户名和密码与MySQL的users表内容进行比对,并确保其中有一个对应的行。
sql ="SELECT COUNT(*) FROM users WHERE user='"
+ username + "' AND pass = '" + password + "'";
如果用户输入的用户名和密码是"Tom"和"Welcome01",则该语句变为
SELECT COUNT(*) FROM users WHERE user='Tom'
AND pass = 'Welcome01';
如果输入的用户名和密码是“abc”和“x' OR 1=1 LIMIT 1;--,”,则该语句变为
SELECT COUNT(*) FROM users WHERE user='x'
AND pass = 'x' OR 1=1 LIMIT1;-- '
该语句则允许用户使用不正确的密码登录数据库。除此之外,SQL注入攻击还可以用于非法创建用户,删除数据库或修改重要的数据等等。
因此,用户不能相信应用程序输入的任何数据,并需要确保应用程序输入内容时能够保证安全。非法用户可以使用具有特殊含义的字符(引号或转义符号)来利用应用程序的代码。用户需要保护数值和字符类型的数据值,非法用户可以访问安全数据并提交可能破坏数据或导致服务器负载过重的查询。用户还需保护公开可用的数据,对这部分数据攻击可能浪费服务器资源
检测潜在的SQL注入攻击
用户可能通过以下方法发起SQL注入攻击
应用程序在将输入值传递给数据库之前需要删除上述内容或者进行报错处理。如果应用程序允许上面的字符输入,则应用程序缺少安全性,需要联系开发人员进行修改。如果上述字符是必要的字符,则应用程序应该做特殊处理,去除掉特殊的含义。
预防SQL注入攻击