2011-03-30 62 views
0

我有問題,請幫忙!如何在asp.net中關閉HTTP連接?

我們的網站最近在慢HTTP POST DOS攻擊下。這是您的服務器收到大量傳入連接並長時間保留它們的原因,因爲發件人發送的信息非常慢,服務器無法爲真正的用戶請求提供服務 - 拒絕服務。

所以我decied拒絕這樣的POST請求:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (_my_condition_here_) 
    { 
     _reject_the_request_by_dropping_connection_ 
    } 
} 

的問題是,我無法刪除在asp.net的HTTP連接:

Response.End(), throw new Exception(), even Thread.CurrentThread.Abort() 

不關閉連接。它會在發件人發送所有假數據時等待,然後用'500服務器錯誤'或其他方法回答它。在這種情況下,緩慢的POST攻擊仍然會成功。

我該如何刪除連接?或者也許在IIS 7中有一些設置或模塊可以爲我做到這一點?

+0

我也這麼認爲,它會更多的是在IIS中的設置。雖然現在不能記住它。 – user492238 2011-03-30 13:40:35

+1

這聽起來像是應該在服務器配置中處理的東西,而不是在應用程序中。 – David 2011-03-30 13:40:42

回答

1

嘗試Response.Close而不是Response.End。請參閱此SO thread的選中答案。

+0

是的! Thant正是我​​想要的!謝謝德克! – irriss 2011-03-31 06:55:07

0

你可以看看IIS7的Request Filtering。只是不知道你的'條件'是否可以通過請求過濾的方式來實現。 Ofcourse IP Security是一個選項,但不是很優雅。 在網絡服務器前沒有Forefront TMG(或其他防火牆)嗎?如果是這樣,您可以在防火牆中添加一些安全性。

如果他們兩個都不能做你想要的東西,你可能需要編寫自己的HTTP Module來停止請求。這仍然不能回答你如何停止請求的問題。也許一個解決方案就是爲這些'用戶'提供一個空白頁面。這樣你就不必停止請求,只需要爲它們提供一個空白頁面。這會給你的網絡服務器一些負擔,但不會影響數據庫服務器。

0

您是否考慮過減少連接超時?