2013-02-05 80 views
13

我正在開發一個asp.net MVC web應用程序,並且客戶端請求我們盡我們所能使它儘可能具有抵禦拒絕服務攻擊的能力。他們擔心該網站可能會收到惡意的大量請求,意圖減慢/取消網站。防止惡意請求-DOS攻擊

我已經與產品所有者真正被淘汰的職權範圍進行實際的Web應用程序的討論這一點。我認爲這是託管/網絡團隊負責監控流量和響應惡意請求的責任。

但是他們堅持認爲應用程序應該有內置的一些預防措施。但他們不想實施CAPTCHA。

有人建議我們限制可用於會話的給定的時間框架內作出的請求數量。我正在考慮做這樣的事情 Best way to implement request throttling in ASP.NET MVC?但是使用會話ID而不是客戶端IP,因爲這會給來自公司防火牆後面的用戶帶來問題 - 他們的IP都是一樣的。

他們還建議增加關閉網站的某些區域的能力 - 這意味着管理員用戶可以關閉數據庫密集區.....然而,這將通過UI控制,當然,如果是下無論如何,DOS攻擊管理員用戶無法進入。

我的問題是,真的值得這樣做嗎?當然,真正的DOS攻擊會更先進?

您有任何其他建議嗎?

+0

有趣的是,我只是在尋找一種解決方案來實現這一點,就在幾分鐘前。 –

+4

拒絕服務攻擊是無法避免的,如果可以採取任何措施來減輕攻擊,通常不會在應用程序級別完成。 – Icarus

+6

我不是(完全)專家,但如果我想DOS攻擊服務器,我將首先嚐試發送充電的ping。我不認爲防止DOS攻擊應該在網站側進行處理,但應該使用防火牆來保護網站。我們有足夠的Sql Injection,Cross Site Scripting等等...... – tschmit007

回答

8

拒絕服務攻擊幾乎可能會影響其他人的服務穩定性。在這種情況下,您正在討論網絡DoS,並且如前所述,這通常不會發生在您的應用程序級別。

理想情況下,這種攻擊會在網絡級別減輕。有專門的防火牆爲此構建,例如Cisco ASA 5500 series,它可以從基本保護到高吞吐量緩解的方式發揮作用。他們是非常智能的設備,只要正在使用您正在使用的吞吐量的正確模型,我就可以保證其阻止這類攻擊的有效性。

當然,如果這是不可能有機會獲得,這是否給你一個硬件防火牆,也有一些治標的辦法,你可以落實到位,以協助這些類型的攻擊防禦。 請注意,這些都不會像專門的防火牆一樣有效。

一個這樣的例子是IIS模塊Dynamic IP Restrictions它允許您定義最大併發請求的限制。然而,實際上這有一個缺點,它可能會開始阻止來自瀏覽器的合法請求,這些瀏覽器對於下載腳本和圖像等具有較高的併發請求吞吐量。

最後,有些東西你可以做到這一點是真的原油,也真的有效的,有點像我以前寫的。基本上,它是一個小工具,用於監視來自同一IP的重複請求的日誌文件。因此,讓我們假設從1.2.3.4超過2秒的/Home 10請求。如果檢測到這種情況,則會添加防火牆規則(在Windows高級防火牆中,使用shell命令添加)來阻止來自此IP的請求,然後可以在30分鐘左右後刪除該規則。

就像我說的,這是非常粗略的,但如果你有服務器級別做到這一點,你真的沒有很多明智的選擇,因爲這不是它應該做的事。你完全正確的認爲,託管服務提供商的責任是有限的。

最後,你對CAPTCHA也有所瞭解。如果有的話,它可以通過一次又一次地執行圖像生成(可能是資源密集型)來幫助實現DoS,從而使您的資源更加匱乏。然而,如果您的網站被自動註冊機器人發送垃圾郵件,驗證碼會有效的時間,但我相信您已經知道了。

如果你真的想做的事情在應用層面的東西只是爲了取悅那是權力,實施在您的應用程序基於IP的一些要求限制是可行的,儘管90%的無效(因爲你仍然必須處理請求)。

+0

需要注意的是,動態IP限制在IIS框本身上運行,因此在攻擊下服務器性能仍然可能受到影響。建議使用可提供更好保護的專用防火牆設備。使用雲服務可以帶來更多好處,因爲在大多數情況下您無需擔心。 –

+0

@LexLi是的,這就是我所說的網絡層面的緩解。我在我的答案中提出的所有內容對於*真正的緩解都不太理想。 –

2

您可以實現在雲和規模的服務器解決方案,如果你確實不得不熬夜,但它可以得到昂貴...

另一個想法是記錄註冊用戶的IP地址。如果DOS限制所有流量來自「好」用戶的請求。

1

防止在應用程序級別發生真正的DoS攻擊是不可行的,因爲請求很可能會在殺死您的應用程序之前終止您的Web服務器,因爲您的應用程序與應用程序池相關聯,由您正在使用的服務器技術定義的最大併發請求數。

這個有趣的文章 http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45 指出Windows 7,Windows Vista和Windows 8有一個最大的10個併發請求。它進一步聲明:「您將需要Windows服務器操作系統來查看高負載下異步方法的優點」。

您可以增加與您的應用程序,以增加將要排隊的請求的量(後來計算,當線程準備)相關的應用程序池的的HTTP.sys隊列限制,這將阻止HTTP協議棧(HTTP.sys) 當超出限制並且沒有工作進程可用於處理其他請求時,將返回Http錯誤503。

您提到客戶要求您「盡最大努力使其儘可能抵禦拒絕服務攻擊」。 我的建議可能不適用於您的情況,但您可以考慮實施文章中提到的基於任務的異步模式(TAP)以滿足客戶的需求。

此模式將釋放線程,同時執行長時間操作並使線程可用於進一步請求(從而保持HTTP.sys隊列的更低) - 同時還爲您的應用程序提供了多項請求執行第三方服務或多重密集IO計算。

該措施不會使您的應用程序具有抵禦DoS攻擊的能力,但它會使您的應用程序儘可能在其所服務的硬件上負責。