利用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的关键字来做用户名注册的话也会被挡掉,

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

posted @ 2008-11-23 20:20 oec2003 阅读(1216) 评论(11)  编辑 收藏 网摘 所属分类: Asp.net

  回复  引用    
#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安全性问题啊。比如,静态的文本显示页面。

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1339503




历史上的今天:
2007-11-23 c#和javascript交互

相关文章:

相关链接: