https://baike.baidu.com/item/sql%E6%B3%A8%E5%85%A5/150289
一.什么是SQL注入
SQL注入:是一种将SQL代码添加到参数中,传入SQL服务器解析并执行的一种攻击手法。
二. SQL注入的产生原因
- 对前端的输入参数没有进行过滤
- SQL服务器没有做相应的安全配置
三.如何寻找SQL漏洞
- 找到web页面中的了输入点,有三部分可检查:get数据、post数据、http头信息(用户的一些个人信息,如Agent、referer,cookie等)。
- 找到哪些请求可触发异常情况。
总结:寻找SQL漏洞的过程,就是找到可以进入到SQL服务器,并执行代码的过程。
四.如何进行SQL攻击
- 数字攻击
在SQL语句中,查询条件包含数字,该情况下,就可以构造SQL代码进行攻击。
例如:
正常SQL语句:SELECT * FROM myTable WHERE id = 1
攻击SQL语句:SELECT * FROM myTable WHERE id = -1 OR 1=1
如上所示,让id等于一个不存在的值,但是后面拼接一个永远成立的值,即输入的参数为"-1 OR 1=1",那么这条语句就可以正确的执行,并且获取myTable表中的所有数据。
- 字符串攻击
原理跟数字攻击类似,同样是构造SQL代码到服务器中执行,但是字符串攻击主要是利用"代码注释"的特性,在SQL代码中用于注释的符号有:"#"、"--"
正常SQL语句:SELECT * FROM myTable WHERE name = 'a' AND pwd = '123'
攻击SQL语句:SELECT * FROM myTable WHERE name = 'a'# AND pwd = '123'
此时,攻击语句执行的时候,传递的参数为 " a'# "(注意 a 后面的 ' 符号,这是闭合SQL语句的关键),pwd的值无所谓了(因为已经被当做注释,不执行了),这样就可以不通过pwd信息就能查到name = a 的相关信息
五.如何防止SQL注入
- 对用户的输入和提交信息做严格的验证,验证包括:类型验证、格式验证、特殊字符处理等,可以说是"永远不要相信用户的输入"
- 不要使用动态拼装sql语句
- 不要使用管理员权限数据库
说明:此文仅仅起到一个“抛砖引玉”的作用,要想了解更多,请自行深入学习。