2012-01-02 60 views
1

我试图在应用程序开始读取请求的输入之前执行aditional验证,根据头和表单数据或类似的东西来结束可疑请求。在Application_BeginRequest之前验证请求?

有没有可能?

[更新]

我聚焦防止由ASP .NET验证的BeginRequest和ins't抓之前发生的零日vunerability。

如果我可以控制创建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

它看起来像你的解决方案仍使用BeginRequest事件,没错,就是从管理的本机代码,而不是? – RickNZ 2012-01-07 11:45:10

+0

我使用它,但我正在处理的问题发生在ASP.net处理程序中,导致所有服务器中出现DoS。 本机处理程序,我得到原始请求,所以,问题在那里还没有发生。 微软已经修复了这个错误,所以它不再发生了。 – LawfulHacker 2012-01-17 15:55:02

回答

2

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

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

在一些注册的HttpModules(包括Global.asax)中的BeginRequest事件也会在别人之前运行。但是,ASP.NET在排序方面没有任何保证。

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

+0

任何想法如何取代这些标准模块? 正是我想要的。可悲的是,validareRequest并不完美,我试图修复一个零日的可调性。 – LawfulHacker 2012-01-02 02:24:02

+0

我自己对此没有任何经验,但您是否看到过此MS KB文章:http://support.microsoft.com/kb/957508?它可以为你节省大量的时间。 – 2012-01-02 02:31:41

+0

这个链接还有一些很好的信息:http://learn.iis.net/page.aspx/543/administration-pack/ – 2012-01-02 02:34:54