有什么好的办法避免程序被SQL注入


对于WEB程序项目,有时候接收的参数变量比较多,如果一个个去check会非常麻烦,请问有没有一种比较简单的方法来避免。

讨论 php

对极限的冲动 12 years ago

小飞的方法很好 ,数字型和字符型都进行了很好的过滤。除了防SQL注入还要做好防 XSS (包括反射型XSS和存储型XSS)、 上传漏洞 的准备,这几个是常用且有效的攻击手段,我们公司都出现过这几个漏洞,不过修复得也很快。

XSS :又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。

   
  一般寻找跨站攻击的地方是找有表单输入的地方;然后提交一段脚本语言,比如javascript、vbscript等;这样可以获得用户和管理员的Cookie信息、挂马、钓鱼。
 

有了管理员的Cookie信息,有时能对web后台操作,发布一些信息获得用户的Cookie或给用户挂马。
挂马是向页面中加入恶意转向代码,当你访问被加入恶意代码的页面时,你就会自动的访问被转向的地址或者下载木马病毒。
防御方法过滤掉"<"、">"、"\"、以及单双引号就行,使用htmlspecialchars函数做过滤。

上传漏洞 :主要分为两大类, 一类 是没有对上传格式做很好的限制,比如linux环境下上传个php的木马,过滤方法不能使用排除法,因为有些扩展名是不能预料到的。比如.php3,.php4也可以当做php网页来执行。要限制住只能使用某某扩展名,比如".JPG"、".BMP"、".GIF"。而且要再服务端做校验,不要紧紧用客户端脚本,因为可以修改发送的封包的,把封包中的muma.php.JPG修改为muma.php。
一类 是网页嵌入图片时,没有使用<IMG>标签链接图像地址,而是把图片内容包含在网页中,这样就可以构造恶意的图片内容来搞破坏了,比如:
GIF89a <head> <meta http-equiv = "refresh" content = "1; url=http://www.hacker.com/" />. </head>
访问这个网页会加载图片,就跳到挂有木马的http://www.hacker.com/ 网站了。
这一点,平台部的兄弟们做得很好,不管上传什么,一律把文件生成缩略图快照,两类上传漏洞都防住了。

其它的CSRF、Session Hijacking、HTTP Response Splitting -HTTP响应拆分攻击、Flash溢出跨站等比较难利用,一般不容易中招。

另外防止SQL还需设置php.ini文件中的display_errors = Off,因为通过构造一些恶意的SQL语句造成网页显示错误信息,而错误信息又包括一些敏感的信息,比如数据库表名、字段名等就不好了。

神北小毬_ answered 12 years ago

Your Answer