[原]发布一个防SQL注入漏洞的HttpModule

写在最前面的话:
下面的内容可以不看,但是这段一定要看,看完后再写回复。
本文所描述的前提环境是:
你手里有一个Asp.net的系统,这个系统存在SQL注入漏洞,但是你不能动它的源代码(非技术因素)。

SQL注入漏洞就不解析了,我认为防止SQL注入漏洞最有效的方法只有“意识”和“参数化查询”这两条(针对.net和Java,其他不熟悉,不乱说)。

由于我们这里部署了很多Asp.net的系统和网站,有一些存在SQL注入漏洞,为了不碰它的源代码,特意写了这个HttpModule。

使用正则表达式作为过滤规则是为了尽量降低误判率,基于关键字的判断规则很容易误判。

部署很简单,将DeSqlInjection.dll 复制到 bin 目录下面,在Web.config文件中加入下面两段,就可以了:

对于 ' or 1=1-- 这种方式的注入无能为力。

适当修改killkill_DenyRegex的正则表达是可以将该过滤器退化为基于关键字过滤的过滤器,但是不推荐这么做。

可以自行修改killkill_DenyRegex的正则表达式,使过滤规则更加强大或者高效,可以的话,顺便告诉我你的精妙正则表达式 :-)

<appSettings>
    <!--DeSqlInjection.RegexFilter 配置-->
    <add key="killkill_DenyRegex" value=".*((;.*update(\s|\*/|/\*).*\w+.*(\s|\*/|/\*)set(\s|\*/|/\*).+=.+)|(;.*delete(\s|\*/|/\*).*from(\s|\*/|/\*).+\w+)|(.*select(\s|\*/|/\*).*\w+.*(\s|\*/|/\*)from(\s|\*/|/\*).*)|(;.*(drop|alter|truncate|create)(\s|\*/|/\*).*table(\s|\*/|/\*).*\w+)|(;.*declare.*cursor.*)).*"/>
    <add key="killkill_QueryLength" value="10"/>
    <add key="killkill_RedirectPage" value="~/Deny.htm"/>
    <!--DeSqlInjection.RegexFilter 配置-->
</appSettings>

<httpModules>
    <!--DeSqlInjection.RegexFilter 配置-->
    <add name="DeSqlInjectionModule" type="DeSqlInjection.RegexFilter, DeSqlInjection"/>
    <!--DeSqlInjection.RegexFilter 配置-->
</httpModules>

该HttpModule 在 Visual Studio 2008 sp1 下开发,发布目标Framework为2.0,源代码可以随便改,但是请保留“Powered By killkill”的信息,源代码下载后请重新编译一下,获得dll文件。如果嫌麻烦,就下载 dll 文件吧。

源代码下载

DLL文件下载

posted @ 2009-02-26 10:44  killkill  阅读(5887)  评论(34编辑  收藏  举报