2012-01-02 61 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