2016-02-29 63 views
0

我試圖圍繞如何真正保護任何公開可用的ajax調用。如何防止AJAX端點上的DDoS?

讓我們說一個公共頁面上的JavaScript(所以沒有任何類型的用戶身份驗證)包含對PHP腳本(REST API或只是一個腳本,無所謂)的AJAX調用,它會執行很多繁重的操作。因此,任何用戶只需查看源代碼,找到AJAX調用,重建並執行它,然後在一秒內再次執行一百萬次,並以這種方式對您的網站執行DDoS操作,但效果並不好。起初我認爲HTTP_REFERER檢查可能會有所幫助,但是作爲任何頭字段,這也是可操作的(只是使用curl請求),所以安全性的提高不會太高。

下一個方法是關於使用會話id,cookie等爲每個頁面查看器構建某種訪問鍵的組合,並且當有人超出限制時,AJAX調用會遇到錯誤。聽起來很不錯,但只是通過清潔餅乾等,一切都會重新設置。所以也沒有真正的解決方案但是當然!使用IP!好想法!公共網絡中僅使用一個IP訪問互聯網的用戶將非常高興,如果一個歹徒會通過濫用電話阻止所有用戶的服務。所以,也沒有很好的解決方案。

所以,我真的被困在這裏,想不出任何好的答案來解決我的問題。

我也想過API密鑰或類似的東西。但是,這是一個也可以從JavaScript源中提取的信息。那麼,如何防止其他服務器以代理方式使用您的服務向您的用戶提供數據? (例如,你實現你的網站GMaps API(或任何其他API),有人利用你的腳本訪問API與您鍵)

TL;博士

有沒有真正保護什麼好的辦法你公開可查看的AJAX呼叫濫用它們來爲您的網站進行DDoS攻擊,在其他網站上展示您的數據等。

+0

你可能想看看智威湯遜的。 JSON Web Tokens是一種開放的行業標準,用於在雙方之間安全地聲明索賠。 – Vatsal

回答

1

我認爲您正在過度關注AJAX。當你的站點發出一個ajax請求,在服務器端,它和任何其他頁面請求一樣(即使某些腳本處理更加密集)。您需要保護整個網站,而不僅僅是特定的腳本。如果您的服務器沒有任何DDoS保護,可以通過任何頁面進行攻擊。看看服務如CloudFare

+0

同意。如果有任何特定請求導致服務器CPU或資源佔用率過高,請使用驗證碼或每個IP的速率限制(注意速率限制,而不是阻止)保護這些請求。 – SilverlightFox

0

作爲@Sage提到它類似於正常的http請求。您可以使用普通身份驗證,因爲每次進行ajax調用時,http頭/ cookie信息都會傳遞到服務器。爲了獲得清晰的視圖,您可以在瀏覽器上查看開發者控制檯它與公佈網站根網址相同。只要確保你有ajax調用的認證檢查。