利用HttpModule实现防sql注入

    sql注入是被谈的很多的一个话题,有很多的方法能够实现sql的防注入,在这里就简单说一下如果使用HttpModule来实现sql的防注入。

    在项目中添加一个类让其实现IHttpModule接口。IHttpModule接口有两个方法 Init 和 Dispose。然后在Init方法中来订阅

    AcquireRequestState事件。

Code

 

    为什么是AcquireRequestState 事件而不是Begin_Request呢 ,因为在Begin_Request执行的时候还没有加载session状态,而在处理的时侯

可能会用到session。

    在AcquireRequestState 事件中我们就要进行相应的处理了,思路如下,一般网站提交数据只有两个地方,表单和url,所以就在该事件中将从这两处提交的数据截取,判断是否有一些危险字符,然后做相应处理。代码如下

 

Code

 

    上面的代码只是做了简单的处理,当然也可以在事件中将输入非法关键字的用户ip ,操作页面的url,时间等信息记录在数据库中或是记录在日志中。而且还用到了一个叫ProcessSqlStr的方法,这个方法就是用来处理字符串的,判断是否合法,如下

 

Code

 

    到这儿类就写好了,再在web.config中做相应的配置就大功告成

 

Code

 

   用这种方法很方便,只需在这一处做处理,全站都能应用到,不过如果一个用户想用varchar 等sql的关键字来做用户名注册的话也会被挡掉,

不过应该没有人这么无聊吧,呵呵!


作者:oec2003(水杯)
出处:http://oec2003.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2008-11-23 20:20 oec2003 阅读(1782) 评论(12) 编辑 收藏

 回复 引用   
#1楼 2008-11-26 09:07 xiaolou[未注册用户]
凭什么不让我输入
declare |exec|varchar |cursor |begin |open |drop |creat |select |truncate

博客园阻止你输入了吗

 回复 引用 查看   
#2楼[楼主] 2008-11-26 11:15 oec2003      
@xiaolou
防sql注入的方法很多
这只是提供了一种方案
webconfig中配置的关键字 怎么样去处理就要看每个人的需求了

感谢你的回复

 回复 引用   
#3楼 2008-11-28 08:59 zhang12223[未注册用户]
看起来不错
 回复 引用 查看   
#4楼 2008-12-04 12:52 leejun      
会不会太影响效率呢?
 回复 引用 查看   
#5楼[楼主] 2008-12-04 21:49 oec2003      
@leejun

个人觉得对效率没什么影响
不过 这种方法并不很通用,限制太严格了

 回复 引用 查看   
#6楼 2008-12-10 11:23 幻蓝      
是啊

我记得没有错的话。

用 ADO.NET的参数形式就可以避免注入

 回复 引用   
#7楼 2009-02-26 12:38 fasdfasfd[未注册用户]
这种方式防注入并不好,我发一个共享代码都不行.程序员上的论坛都能发代码才行噻。
select * from aaa
delete

 回复 引用 查看   
#8楼[楼主] 2009-03-24 17:41 oec2003      
@fasdfasfd

呵呵,这种方式适用特定场合

 回复 引用 查看   
#9楼 2009-06-19 14:51 发条橙子      
拜读大作,有点自己的考虑,希望交流一下

就我个人所理解的asp.net的编程框架。
IHttpModule 这个接口在所有用户对不同page的请求前执行。无论任何的page都会用到楼主自定义的注册的事件。那对不用考虑sql注入的页面是不是一种资源浪费?因为,这类页面不用考虑sql安全性问题啊。比如,静态的文本显示页面。


 回复 引用 查看   
#10楼[楼主] 2009-06-19 15:08 oec2003      
@发条橙子
这种限制确实不很通用 ,在文中我也说了
这种方式可以对url的参数和form提交的内容都能监测到,实用特定场合

 回复 引用 查看   
#11楼 2009-06-19 15:44 发条橙子      
拜读大作,有点自己的考虑,希望交流一下

就我个人所理解的asp.net的编程框架。
IHttpModule 这个接口在所有用户对不同page的请求前执行。无论任何的page都会用到楼主自定义的注册的事件。那对不用考虑sql注入的页面是不是一种资源浪费?因为,这类页面不用考虑sql安全性问题啊。比如,静态的文本显示页面。

 回复 引用 查看   
#12楼 2010-01-11 17:50 show_show      
放到 Global.asax 里