2013-09-30 51 views
4

我打算使用MVC4和Web API開發一個Internet站點。它是一個簡單的應用程序,它將顯示基於搜索的客戶信息。如何使用Web API限制DOS攻擊

對於搜索功能我打電話給webApi使用Ajax get方法(我知道我應該使用Post,但考慮這是當前實現)。

我的API調用 「/api/Data/getSearchResults/?companyName='" + companyName

我覺得這塊線可以被用作DOS攻擊打倒我的服務器。有沒有辦法,我可以使用微軟反跨站腳本庫或ValidateAntiForgeryToken屬性或任何其他機制來確保該請求被任何來自博派正宗的用戶,而不是生成的。

我的網站啓用匿名訪問。

回答

1

通過DOS攻擊我假設你的意思是你係統中的攻擊不斷的請求是爲了引起由於公司搜索查詢對數據庫的持續執行導致資源枯竭。

爲了防止出現這種情況,您可以在每個請求上記錄遠程IP地址並限制響應,以便每分鐘爲每個IP地址提供這麼多的服務。任何添加的請求都可以通過人工延遲來滿足(例如Thread.Sleep())。這種方法對於遠程IP地址範圍廣泛的DDoS攻擊將更加有限,並且假定您的IP地址查找佔用的資源少於公司搜索的資源,但它仍然有幫助。

MS Anti-XSS只會保護您免受Cross Site Scripting的侵害,並且不會對DoS/DDoS提供保護。反僞造令牌只會保護您免受Cross Site Request Forgery的影響 - 即使您擁有令牌,機器人也可以簡單地請求您的頁面獲取令牌,然後將其提交給您的API函數。

A CAPTCHA可能是另一種解決方案,但您需要他們在您的網頁中輸入CAPTCHA代碼,然後在您的API Web方法中驗證它。

2

有一個名爲WebApiThrottle的庫,它定義了一個ThrottlingHandler,您可以使用它來以編程方式限制每秒/分鐘/小時的請求數量......這取決於調用者的IP或其他屬性。

另一種選擇是act at the IIS level,當然你可以使用兩者來獲得更好的控制。