我尝试在应用程序开始读取请求输入之前执行aditional验证,根据标头和表单数据或类似内容结束可疑请求。
有可能吗?
[更新]
我专注于防止在BeginRequest之前发生的零日可用性,并且不会被ASP .net验证捕获。
如果我可以控制HttpWebRequest对象的创建,我可以检测到这种攻击。
[解决]
可以使用本机模块解决。
可以在此处找到有关创建本机模块的信息(使用C ++): http://learn.iis.net/page.aspx/169/develop-a-native-cc-module-for-iis/
我在谈论的零日漏洞在本博文中有描述: http://blogs.technet.com/b/srd/archive/2011/12/27/more-information-about-the-december-2011-asp-net-vulnerability.aspx
我为它做了一个修复(是一个预发布,不适合制作),可以在GitHub上找到:https://github.com/ginx/HashCollisionDetector
感谢您的帮助。
答案 0 :(得分:2)
BeginRequest
是IIS请求处理管道中的第一个事件。
在该事件之前发生的唯一预请求操作是创建HttpContext
,HttpRequest
和HttpResponse
类的实例。
还有一些注册BeginRequest
(包括Global.asax)中的HttpModules
事件将在其他事件之前运行。但是,ASP.NET不保证订购。
答案 1 :(得分:0)
您可以通过在web.config中设置页面validateRequest="true"来要求HttpApplication为您执行此操作。
否则,您可以尝试替换IIS管道中的某些标准模块(不推荐使用,除非您手头有很多时间)。
以下是一些非常好的资源:
答案 2 :(得分:0)
可以使用本机模块解决。
Native模块在任何ASP .net验证之前执行。
有关创建本机模块的信息,请参阅此处(使用C ++):http://learn.iis.net/page.aspx/169/develop-a-native-cc-module-for-iis/