相信有很多朋友,会了解sql注入,也知道如何的防范。网上这方面的资料很多,我就不怎么说了,下边说说我自己在项目中是如何解决这一问题的.
现在对网站的攻击手段很多,很复杂,大体可以分为服务器端和客户端。攻击的角度很多。就连杀毒软件厂商瑞星都能被攻击,可想而知,不法分子的手段有多高明。暂不谈这方面。
我只说明我的理解防止SQL注入方法。网上很多方法,大多都是什么一些过滤函数,HttpModule与HttpHandler里写函数,过滤表单等方法。这样是可以防止一些注入但是我个人认为这样不好。我可以罗列出这几点:1:程序代码冗余,偶尔会忘记过滤 2:程序的执行效率,多一些代码总是需要一些时间去执行的。3:如何合法,正常与用户就是需要输入Update 、delete等一些字符,岂不是被过滤了吗?4:用函数过滤Sql关键字,不能彻底的过滤 5:别人可以利用二进制等一些手法,绕过过滤函数。不知道朋友们是否同意我这关点,请拍砖。
下边谈谈我的解决方法:1: SQL语句参数化查询,强烈推存用 存储过程,哪怕是select * from 表 也用存储过程,这样代码没有冗余,又防SQL注入,代码易读,何乐而不为呢?
2:用.net 3.5的linq to sql ,据说这也可以防止注入,因为本人项目中为使用此技术。项目毕竟是用成熟的东西嘛。3:对参数做类型判断过滤,比如一个a.aspx?id=123这样的
代码,我们可以对id进行类型,判断,即id必须是整数,否则不通过验证。4:过滤任何关键字,不如过滤一个单引号来的重要。做到以上几点程序防SQL注入我想已经够了。
下边这些我做的项目都是采用以上过滤,根本不需什么过滤关键字那些函数。大家可以看下,www.5173.com ,www.658.com 等有代表性的。
例如:
随便大家拍砖!~