在Application_BeginRequest之前验证请求?

时间:2012-01-02 01:18:59

标签: asp.net .net iis httpwebrequest httpmodule

我尝试在应用程序开始读取请求输入之前执行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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

BeginRequest是IIS请求处理管道中的第一个事件。

在该事件之前发生的唯一预请求操作是创建HttpContextHttpRequestHttpResponse类的实例。

还有一些注册BeginRequest(包括Global.asax)中的HttpModules事件将在其他事件之前运行。但是,ASP.NET不保证订购。

答案 1 :(得分:0)

您可以通过在web.config中设置页面validateRequest="true"来要求HttpApplication为您执行此操作。

否则,您可以尝试替换IIS管道中的某些标准模块(不推荐使用,除非您手头有很多时间)。

以下是一些非常好的资源:

ASP.NET Application Life Cycle Overview for IIS 7.0

IIS 7 Modules Overview

Customizing IIS 7.0 Roles and Modules

答案 2 :(得分:0)

可以使用本机模块解决。

Native模块在任何ASP .net验证之前执行。

有关创建本机模块的信息,请参阅此处(使用C ++):http://learn.iis.net/page.aspx/169/develop-a-native-cc-module-for-iis/