2010-06-03 74 views
13

我即將實施RESTful API到我們的網站(基於WCF數據服務,但這可能沒有關係)。您如何防止對RESTful數據服務的暴力攻擊

通過此API提供的所有數據都屬於我的服務器的某些用戶,因此我需要確保只有這些用戶才能訪問我的資源。出於這個原因,所有請求都必須使用登錄/密碼組合作爲請求的一部分來執行。

在這種情況下防止暴力攻擊的推薦方法是什麼?

我正在考慮記錄因錯誤憑證而被拒絕的失敗請求,並且在超過某個失敗請求閾值後,忽略源自相同IP的請求。這是標準方法,還是我缺少重要的東西?

回答

8

由於NAT網關數量衆多,基於IP的阻塞本身具有風險。

如果快速請求太多請求,您可能會減慢(tar pit)客戶端的速度;即在響應之前故意插入幾秒鐘的延遲。人類不太可能抱怨,但是你放慢了機器人的速度。

+7

嗯,你想如何將CAPTCHA放入RESTfull API? AFAIU所有客戶都不應該是人類。 – SergGr 2010-06-03 12:17:20

+0

好點,我必須眨眼RESTful位。棘手。 – crazyscot 2010-06-03 12:33:43

+0

captcha是我現在正在使用我的常規網站。但正如Iphone初學者指出的那樣,這不是一個寧靜的API的選擇。然而,Tarpitting可能是一個好主意。 – 2010-06-03 16:21:05

3

我會像使用網站一樣使用相同的方法。跟蹤在某個窗口內失敗的登錄嘗試次數 - 例如允許3(或5或15)在一定的合理範圍內,比如15分鐘。如果超出閾值,則鎖定帳戶並標記發生鎖定的時間。你也可以記錄這個事件。經過另一個合適的時間段後,比如說一個小時,解鎖賬戶(在下一次登錄嘗試時)。成功登錄會重置計數器和上次鎖定時間。請注意,您實際上從未嘗試在鎖定的帳戶上嘗試登錄,您只需返回登錄失敗。

這將有效限制任何暴力攻擊,使合理密碼的攻擊不太可能成功。攻擊者使用我上面的號碼只能每1.25小時嘗試3次(或5次或15次)。通過使用日誌,您可以在同一天從同一個帳戶查找多個鎖定,從而發現這種攻擊可能發生的時間。由於您的服務旨在供程序使用,因此訪問該服務的程序的憑據設置正確後,除非發生攻擊,否則它將永遠不會遇到登錄失敗。這將是另一個跡象表明可能正在發生攻擊。一旦您知道攻擊正在進行中,您可以採取進一步措施,限制對違規IP的訪問或涉及權威機構(如果適用),並停止攻擊。

+2

難道這不會更容易在用戶帳戶上啓動DOS攻擊嗎?例如,我們網站的惡意競爭者可能會故意通過發佈錯誤的密碼來鎖定用戶。他無法訪問他們的帳戶,但他會成功地使我們的網站看起來不可靠。這就是爲什麼我考慮基於IP的方法 - 攻擊者必須欺騙真實用戶的IP地址才能將其鎖定。 – 2010-06-03 16:25:18

+0

@Adrian - 是的,但這是一個不同的問題。使用基於IP的方法來解決它可能會使您的服務實際上不可靠,因爲用戶可能忘記在密碼更改後更新其腳本。在這種情況下,用戶可以簡單地等待,直到超時過去,然後再次嘗試而不涉及到你。使用日誌記錄功能,您仍然能夠檢測到DOS攻擊,並從惡意網站中放入一個IP塊,並且在這種情況下,請確認當局。 – tvanfosson 2010-06-03 17:08:16