2013-05-08 115 views
2

我確信這是之前問過的,但無法找到,所以我再次問這個。如何通過來自BOT的Ajax調用來保護?

在我的網站,我有一個Ajax調用節省了用戶的電子郵件和一些隨機的網站特定的屬性。具有屬性的請求網址如下所示。這是一個數據庫寫入請求,並提供一個JSON響應。

http://mysite.com/[email protected]&siteattribute=XYZABCDEF 

現在我覺得問題是,一旦該代碼就會獲取生活,如果有一個人/ BOT知道這個URL,就可以直接輸入很多我的數據庫沙船。我該怎麼做才能阻止呢?任何建議?我應該添加一些加密機制?

+0

首先您可以使用POST方法而不是GET。你也可以創建一個robots.txt文件,以防止像谷歌等機器人。 – 2013-05-08 07:27:53

+0

雅我可以做POST但不會解決我的問題。 robots.txt將只停止那些反正無害的好機器人。想停止一些誰故意寫一個機器人做這個。 Robot.txt不會幫助。如果他們想跟隨robot.txt而不是其他方式,那麼它就是機器人。 – 2013-05-08 12:19:46

回答

0

AJAX集合「X-Requested-With=XMLHttpRequest」頭,然後可以在服務器端使用,以檢測通過ajax調用或從機器人進行調用。

我不會說將停止100%,但會抵制基礎傷害。

就像現在我正在檢查這在我的MainFilter類檢測請求的天氣是那些從機器人的或只是我的頁面上進行AJAX調用。

讓我們希望我們將得到一個肯定的拍攝解決方案。

+0

雅是這樣做的一種方式,但正如你所說的不是一個完整的證明方式。等待更安全的數據庫寫入是一個代價高昂的操作,特別是當雲託管 – 2013-05-08 12:15:54

+0

是的,這也是事實。 – 2013-05-08 12:17:29

+0

我可以編寫一個js腳本,以與他的JS相同的方式發送他的AJAX,並且這將作爲合法來實現。 – Jono 2013-12-16 13:44:58

1

你可以模仿Spring中使用的樣式(或使用Spring) - 每個服務器加載頁面時,它會發出一個CSRF令牌的形式提供密鑰。您可以將此csrf標記放入您的ajax請求中,並在服務器端對其進行驗證。我是一名Python程序員,所以我不太熟悉Java服務器,但this answer包含一個鏈接到大概工作的代碼。

編輯 如果不使用Spring,DeveloperForce列出其實現CSRF令牌2個Java庫。自從Spring MVC成爲Java中最受歡迎的MVC之一以來,我自動假設Spring。

作爲一個一般的經驗法則,它改變服務器端的數據頁通常應POST而不是GET,因爲如果有人爲書籤的網址或看起來在瀏覽器的歷史記錄GET數據將被記錄。

+0

我不在春季工作。我必須建立它的習俗。但我認爲這是正確的方向。讓我對此做一些研究。 – 2013-05-08 12:18:02

0

泛化蛇和咖啡的回答是:

您需要的初始HTML請求鏈接到那些 其在JavaScript中所做的AJAX請求。

您可以通過在每個AJAX調用中傳遞GUID/ID並檢查其有效性服務器端來完成此操作。

  • 只要你的後端通過從 後端語言使它們爲HTML頁面(ASP/PHP/Django的/等),那麼你可以很容易地嵌入 隱藏標籤使用GUID的HTML因爲服務器收到初始HTML 請求,並將GUID存儲在服務器上。

  • 一旦你在服務器上得到了有效的GUID,您可以通過設定的時間後,將其丟棄,使用的設置數量要格外小心 和/或識別,如果HTML頁面的單個實例 正在發送太多/太快的AJAX請求。

請記住,即使使用GUID,只要瀏覽器擁有它,一個BOT /惡意用戶可以抓住它,並把它作爲一個有效的AJAX請求。

因此,這裏的關鍵安全措施是能夠範圍的AJAX的請求到一個HTML請求,並限制使用它

問自己問題「我是否需要不止一次地在這個頁面的每個實例上發出這個ajax請求?」 - 如果沒有,那麼趕上它發生在服務器端,你會知道它的惡意。

相關問題