[原]发布一个防SQL注入漏洞的HttpModule
写在最前面的话:
下面的内容可以不看,但是这段一定要看,看完后再写回复。
本文所描述的前提环境是:
你手里有一个Asp.net的系统,这个系统存在SQL注入漏洞,但是你不能动它的源代码(非技术因素)。
下面的内容可以不看,但是这段一定要看,看完后再写回复。
本文所描述的前提环境是:
你手里有一个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 文件吧。