2012-01-09 73 views
2

2011年12月28日US-CERT發佈了一個關於大多數web服務器因DOS處理散列表衝突而容易受到DOS攻擊的公告。文章hereasp.net散列表漏洞

有人能解釋一下這個散列表適合ASP.NET生命週期嗎?它是每個會話一個散列表還是每個服務器實例一個大散列表?

謝謝 菲德爾

+0

http://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx – 2012-01-09 02:03:20

回答

2

問題的散列表是Request.Form

服務器解析表單數據並將鍵值對放入Request.Form集合中。如果表單數據包含產生相同散列碼的密鑰,則會產生散列衝突,從而降低散列表的性能。

因此,它不是每個服務器或每個會話一個表,而是每個POST請求一個表。

+0

我認爲所有散列表的底層缺陷是:|所以它不僅僅是每個帖子的請求一次。最大的打擊通常是使用POST,但如果一個應用程序在內部使用散列表,那麼它會影響到它也不會? – 2012-01-09 02:04:34

+0

@JohnMitchell:只有在您使用請求數據中的密鑰創建哈希表時,它才能應對DoS攻擊。如果您從其他數據創建哈希表,則不受輸入的影響。 – Guffa 2012-01-09 02:08:30

+0

但是,如果你解析用戶輸入和重複的數據(即任何可能導致桶衝突的數據),那麼這可以用作DDos,失敗是處理衝突所需的時間。因此,雖然文章特別提到POST作爲矢量,但其他矢量可以很容易地使用。 – 2012-01-09 02:11:06

0

散列表整個應用程序的不只是一次到位將被使用。例如,當你添加post變量到一個頁面時,他們會在一個哈希表中內部處理,所以如果你有大量的哈希表衝突(即在頁面上發生同名變量)。它是一個非常高效的內存存儲系統,用於訪問使用單詞集合(「字典」)的「數組」。

這是其中一件事,雖然可以被利用,但更好的做法是使用最佳做法並監視CPU使用情況,限制每頁最大POST大小以及限制來自單個主機的請求。

+0

對不起,剛剛添加,其每個數據的散列表類型,所以它將成爲使用它的每種類型數據的一種類型,所以它的使用遠不止每個會話的每個頁面和頁面上的每個數據項需要一個字典樣式對象。如果你想看看它的使用頻率,我們可以考慮使用散列表。 – 2012-01-09 02:01:49