什么是SQL注入?
1、正常的web端口访问
正常访问是web传入程序设计者所希望的参数值,由程序查询数据库完成处理后,呈现结果页面给用户。
2、SQL注入是如何访问?
(1)SQL注入也是正常的web端口访问
(2)只是传入的参数值并非是程序设计者所希望的,而是传入了嵌套SQL代码的参数值
(3)参数值利用程序处理注入者的逻辑,按注入者的期望执行数据库查询
SQL注入:是通过应用程序把带有SQL代码的参数传递给数据库引擎。
理解:程序设计者缺乏安全意识,没有考虑到用户可能是黑客的情况,黑客会使用SQL数据库的查询语句到参数中,使得想要的数据显示在网站页面中,获取数据库中的数据,从而导致了数据泄露。
为什么要深入了解SQL注入?
1、SQL注入危害大
黑客最终的目标是数据,SQL注入是直达数据库引擎,甚至提权后可以与系统层交互,敏感数据可能被泄露、破坏的风险。
2、SQL注入隐秘性强
SQL注入也是正常的web端口访问,系统或者数据库管理员不易发觉,可能被攻击者长期控制系统或者数据库。
3、SQL注入具有普遍性
SQL关系数据库行业的通用标准,SQL注入不仅是MySQL的问题,也是其他使用SQL的数据库的问题,有证据表明,60%以上有网站具有SQL注入漏洞。
4、知己知彼,目标为防
深入了解SQL注入的终极目标是做好防范,提高数据安全意识,把数据安全提高到一定的战略高度。
理解:SQL注入总的来说是程序设计的漏洞,没有办法去彻底解决掉,因为它也是正常的访问数据库的操作,无法准确阻止,只能尽可能的想到黑客能进行的SQL注入攻击的手段,对黑客输入的数据进行合法性、安全性的检查,从而提前将其操作阻止。
程序端SQL注入攻击原理
1、正常的访问
$sql="SELECT" * FROM users WHERE login='$uname' AND password='$pwd'
PHP程序传入结果参数: $uname=‘huan’ $pwd=‘hxf123’
结果:
`SELECT * FROM users WHERE login = 'huan' AND password='hxf123'`
2、SQL注入访问
PHP程序传入结果参数: $uanme=admin’’ or 1=1 --+ $password=‘hxf123’
结果:
SELECT *FROM users WHERE login="admin" or 1=1
or 1=1–+又被称为万能密码,因为在构成SQL查询语句时,–+注释掉后面的语句了,使得有效的语句为:
select * from users where login=“admin” or 1=1;
理解:黑客利用or 1=1 这个永真式结合”–“注释掉后面的查询语句,使用这次SQL注入的查询语句为真,服务器返回给客户端是真值,这次登录成功认证,从而登录客户端。
SQL注入漏洞的根本原因
(1)SQL注入漏洞是应用程序的问题,而不是系统或者数据库的问题。
SQL注入本质的原因是人对数据安全的意识薄弱。或者即使有安全的意识,而程序员对如何防范无从下手。因此导致程序没有时间对用户输入数据的合法性进行检查,对传入参数的安全性没有完全的过滤。
|