English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 威盾新闻 >> web网站安全黑客入侵攻击之防御SQL注入的要点

 

web网站安全黑客入侵攻击之防御SQL注入的要点

威盾防火墙 2015-01-05

 

web网站安全黑客入侵攻击之防御SQL注入的要点

1.不要信任任何用户提交的数据
2.使用白名单原则进行过滤,黑名单不靠谱,这也是做安全所必须知道的
3.SQL语句要尽量避免使用字符串拼接的形式,强烈建议使用查询参数化(绑定变量)的方法进行查询
4.数据库应遵循“最小权限”原则
5.数据类型检测,不同数据类型进行不同的过滤 
对于第一点,准确来说是:任何经过了客户端的数据都不能信任,因为黑阔还可以通过抓包改包的方法修改一些浏览器不能修改的数据,而这些也是程序猿经常忽略的地方!!


对于第二点,采用白名单而不用黑名单,这是我在刺总的《白帽子讲WEB安全》上觉得收获最大的一个思想,也是安全圈子的常识了!! 因为黑名单原则在无数的例子前面已经突出了它明显的不足之处。 例如,过滤一处SQL注入点,采用黑名单过滤了and这个SQL保留字,但我可以把and改为aNd来绕过过滤机制。 可能你会说,那我把所有的可能都过滤了,不就行了?! 对于这个想法,第一,工作量非常大,而且容易遗漏; 第二,随着数据库版本的更新,可能会出现一些新的保留字,而你又不能及时的过滤,就可能造成悲剧滴发生。。。 所以,能不用黑名单过滤就尽量避免!

对于第三点,上面的两个例子都已经说明SQL语句使用字符串拼接的方法很可能会造成SQL注入的发生了,所以我们要尽量避免使用这样的字符串拼接的方式。。。 这里强烈建议使用 查询参数化(绑定变量)的方法进行查询,这也是刺总所推荐解决SQL注入的方法。。。 从安全的角度来说,查询参数化有效解决SQL注入的问题;从开发的角度来说,还可以提高SQL查询的性能,可以说是一举两得的方法。。。 至于查询参数化是什么概念,可以Google或百度一下,也可以参考一下这里:


http://blog.sina.com.cn/s/blog_63642b13010115se.html
mysql绑定参数bind_param原理以及防SQL注入http://blog.csdn.net/wusuopubupt/Article/details/9668501
绑定参数:http://book.51cto.com/art/200909/154059.htm
测试mysql的绑定变量功能:http://www.jzxue.com/shujuku/mysql/201102/23-6312.html

对于第四点,其实做安全时,任何涉及到权限的问题时,都应该遵循这个“最小权限”原则。即只要给程序所需的权限即可,多余的权限都CUT掉,这样就可以防止一些因为权限过大所出现的安全问题,就例如上面说提到的,利用SQL注入导出Shell甚至在服务器执行任意命令。。。

对于第五点,可能很多程序猿都有这么一个误区,就是只要对用户提交的数据进行mysql_real_escape_string()或是addslashes()处理就可以进行安全的SQL查询了(包括一些专业的文档也这么说)。。。 那我们来看下mysql_real_escape_string()会对哪些字符进行转义:  ’    ”   \r   \n   NULL  Control-Z
上面列举的是mysql_real_escape_string()会进行转义的(addslashes()就不进行讨论了,因为addslashes()转义的比这个函数还要少),那来看下刺总在他书上举的一个例子:

http://www.xxx.com/user.php?id=12,AND,1=0,union,select,1,concat(user,0x3a,password),3,4,5,6,from,mysql.user=substring_index(current_user(),char(64),1)

以上这个例子就没用到 mysql_real_escape_string()转义的字符吧!! 所以对于这种数值型的参数,不能用mysql_real_escape_string()进行转义,应该用intval()或是settype()进行数据类型的限定(当然这里说的是不用预编译的方法来进行SQL查询),其他的也是类似,


但预防SQL注入不能单单靠数据类型的检测,还应该结合以上的一些方案


好了,对于《WEB攻防系列之SQL注入》就告一段落了,有什么错误或是遗漏欢迎提出,希望这篇文章对大家都会有所帮助。。。

不知道大家会不会期待下一篇的《WEB攻防系列》呢?!! 至于下一篇,可能是XSS吧。。。


相关内容: 最新内容:
防止SQL注入攻击的一些方法小结[2015-01-05]
安全关注:黑客入侵手段与防御攻略[2015-01-05]
ICMP攻击的防范步骤[2015-01-05]
Discuz:防御CC攻击说明[2015-01-05]
黑客常用攻击方式之DDoS攻击全面剖析[2015-01-05]
实战演示黑客如何利用SQL注入漏洞攻破一个WordPress网站[2015-01-05]
一些常见的PHP后门原理分析[2015-01-05]
防止SQL注入攻击的一些方法小结[2015-01-05]
安全关注:黑客入侵手段与防御攻略[2015-01-05]
ICMP攻击的防范步骤[2015-01-05]
Discuz:防御CC攻击说明[2015-01-05]
黑客常用攻击方式之DDoS攻击全面剖析[2015-01-05]