2011-12-05 35 views
0

我目前正在開發jQuery代碼,通過Ajax將數據發送到服務器,然後根據請求參數將數據插入到數據庫中。如何使用JQuery AJAX實現通用CSRF標記?

但是,我很擔心這可能會被CSRF攻擊濫用,這會讓事情變得不安全。我試圖研究這一點,只能找到具體框架的答案,例如django和rails,我只是在使用PHP的通用實現之後才找到答案。

我讀過,你可以使用JQuery.ajaxsend()函數來實現代碼,以便使用每個AJAX請求發送一個令牌,但是我不知道如何實現這個,因爲JavaScript顯然沒有訪問PHP會話變量。 cookies的使用足夠安全嗎?

基本上我需要能夠檢查請求的來源,以確保請求是真實的,而不是僞造的請求用來利用系統。

如果任何人都可以指出我最喜歡的正確方向!

回答

1

那麼,知道$.ajax似乎發送cookie,包括PHP會話cookie,請求。使用該功能會將您的攻擊從CSRF更改爲會話劫持,但這只是一個開始。接下來,如果可以避免會話劫持,請通過SSL運行您的服務。

我敢肯定還有其他方法可以做到這一點,但對於香草PHP來說,這似乎工作。有人糾正我,如果我錯了,請。

+0

這是假設AJAX請求是由會話東西認證。 –

+0

那麼用戶需要登錄才能訪問。因此,將會檢查PHP會話進行身份驗證。 –

+0

此外,似乎沒有任何會話cookie信息與$ .ajax一起發送。 –

1

下面是它是如何在Django做了,但沒有什麼這是框架的具體(除了爲「csrftoken」在cookie設置CSRF令牌):https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax

+0

所以我猜測令牌可以通過使用PHP在登錄時生成並添加到cookie中?由於在其示例代碼中沒有生成令牌的功能。 –

+0

Django使用中間件將CSRF令牌添加到每個頁面視圖上的cookie(如果它尚未存在)。所述中間件還檢查每個表單帖子以驗證CSRF令牌是否存在&正確(在POST參數或X-CSRFToken頭中)。 –