2008-09-01 12 views
19

我正在使用jquery ajax將更新發布回我的服務器。我擔心確保我已經採取適當的措施,以便只有我的AJAX調用可以發佈數據。jquery ajax數據發佈的安全建議?

我的堆棧是PHP上的Apache對MySQL的後端。

忠告非常感謝!

回答

27

AJAX在您的頁面中調用的任何請求都可以由應用程序之外的某個人做出。如果操作正確,您將無法確定它們是否是作爲來自您的Web應用程序的AJAX調用的一部分或通過手動/其他方式生成的。

當我們想要確保只有您的AJAX調用可以發佈數據時,您可能會考慮兩種情況:您不希望惡意用戶能夠發佈數據干擾其他用戶的數據,或者您實際上想限制帖子處於多請求操作的「流程」中。

如果您關注第一個案例(某人向另一個用戶發佈惡意數據),無論您是否使用AJAX,解決方案都是相同的 - 您只需通過任何必要的方式驗證用戶身份 - - 通常通過會話cookie。

如果你關心第二種情況,那麼你將不得不做一些事情,比如在流程的每一步發出一個唯一的令牌,並將預期的令牌存儲在服務器端。然後,在發出請求時,請檢查服務器端是否存在正在執行的操作的相應條目,以及預期的令牌是否匹配以及該令牌尚未使用。如果不存在,則拒絕該請求(如果存在),則將該標記標記爲已使用並處理該請求。

如果您擔心的不是這兩種情況之一,那麼答案將取決於您提供的更多細節。

+2

會話cookie身份驗證的問題在於它不足以防止CSRF攻擊。放入一些額外的安全層是一個好主意 - 無論你是否使用ajax。 http://en.wikipedia.org/wiki/Csrf – 2010-03-12 22:01:46

5

使用會話以確保任何Ajax帖子都在經過身份驗證的上下文中完成。將您的Ajax代碼看作您的服務器的另一個客戶端,以這種方式處理身份驗證問題變得更加容易。