2011-10-09 63 views
8

我正在考慮將OpenID作爲我的PHP應用程序的登錄方法,但有一件事阻止了我的繼續:我如何保護OpenID使用者免遭濫用?如何保護OpenID消費者免受濫用?

An example of abusing OpenID by using a consumer as proxy

濫用包括洪水其他服務器與要求,用我的應用程序作爲代理,通過一個大的下載網址爲不必要的或通過做大量的請求減緩服務器。

我想我應該對做請求實行速率限制,但我該怎麼做呢?可能的攻擊者可以使用其他代理或TOR繞過IP檢查。限制允許的提供者會違反OpenID的原則嗎?

我不指望我的用戶是邪惡的,但我想知道在添加另一個可能的攻擊媒介之前需要考慮哪些事項。

重要的是,我將使用lightopenid作爲PHP應用程序的後端。

回答

3

您需要將攻擊分爲兩個池。 1)針對您自己的網站的攻擊,以及2)針對使用您作爲代理的其他人的攻擊。這些問題都不是新的或獨特的OpenID。例如,經典的「告訴朋友」電子郵件表單可以自動發送來自代理方的IP地址和電子郵件的垃圾郵件,從而防止垃圾郵件發送方的後果,並向他們提供(可能)乾淨的IP /電子郵件,而不是已被垃圾郵件保護標記。這主要是通過「CAPTCHA」來解決的,以防止自動使用表單。

對於攻擊你自己的網站,這已被覆蓋無數次。試試這裏:protect your self against DOS attacks

對於攻擊其他人的網站,許多相同的校長適用於其他問題中提到的。遏制身份驗證請求,拒絕不合理或畸形的請求,驗證Content-Length標題與POST後的實際內容,當然,您也可以隨時添加經典的「CAPTCHA」以幫助防止使用您的OpenID使用者進行自動攻擊。

同樣在這裏,我不會基於OpenID頂級域名進行限制,而是根據請求方的IP地址進行限制。是的,人們可以租用代理IP,但由於每個OpenID提供商的用戶羣差異很大,您無法基於頂級域名進行公平限制。您也可以從MaxMind這樣的公司購買已知代理IP的數據庫。如果用戶來自代理IP,請增加您的限制的侵略性。

+0

客戶端IP地址似乎是一件好事,可能使用C類部件來進一步降低濫用機會。 – Lekensteyn

0

按比例減緩請求的某個域的次數。

例如,假設某人試圖通過請求像http://example.com/foohttp://example.com/barhttp://example.com/foobar120382很多網址,用你的DOS服務器example.com。考慮所有這些請求作爲example.com的請求,並毫不拖延地執行第一個請求。下一個請求前2秒延遲,第三個請求前延遲4秒,第四個請求前延遲8秒,第五個請求前延遲8秒,依此類推。

這樣的小延遲幾乎不被人類用戶所察覺,但會極大地降低您的服務器充當DOSsing代理的能力。只要認爲第12個請求會被阻止超過一個小時(如果您使用兩個冪)。

很明顯,您還應該爲常見的大型OpenID提供程序(如Google或myOpenID)創建某種白名單或灰名單。這些域名可能會經常被要求。

+0

延遲這種方式可能會DOS我自己的服務器,這是我試圖避免的另一件事。 – Lekensteyn

+0

爲什麼?只需將這些請求放入一個異步隊列中,可能需要像http://stackoverflow.com/questions/124462/asynchronous-php-calls。 – gioele

+0

這不起作用,因爲我需要驗證另一方的響應,這就是爲什麼請求首先發送。此外,它不能防止不答覆的服務器(這需要較小的超時) – Lekensteyn

0

我會做些簡單的事情。將OpenID端點限制爲一組受信任端點:Google,wordpress,myopenid,yahoo。它可能會覆蓋大部分用戶,並且不會讓漫遊器讓您的網站產生隨機站點的流量。

+0

這對於私人應用程序來說很好,但這與OpenID的開放性質相違背。當機制被嚴重濫用時,儘管有一個允許訪問公共服務的標誌可能很有用。 – Lekensteyn

+0

好吧,對於非私人應用,它也可以。是的,它會違背開放性質,但實際上我認爲很少有人在主要提供商之外使用openid – Bozho

相關問題