CSRF_TOKEN
目的是防御CSRF攻擊。
Token就是令牌,最大的特點(diǎn)就是隨機(jī)性,不可預(yù)測。
CSRF 攻擊之所以能夠成功,是因?yàn)楹诳涂梢酝耆珎卧煊脩舻恼埱螅撜埱笾兴械挠脩趄?yàn)證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗(yàn)證信息的情況下直接利用用戶自己的 cookie 來通過安全驗(yàn)證。要抵御 CSRF,關(guān)鍵在于在請求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中。可以在 HTTP 請求中以參數(shù)的形式加入一個(gè)隨機(jī)產(chǎn)生的 token,并在服務(wù)器端建立一個(gè)攔截器來驗(yàn)證這個(gè) token,如果請求中沒有 token 或者 token 內(nèi)容不正確,則認(rèn)為可能是 CSRF 攻擊而拒絕該請求。
這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產(chǎn)生并放于 session 之中,然后在每次請求時(shí)把 token 從 session 中拿出,與請求中的 token 進(jìn)行比對,但這種方法的難點(diǎn)在于如何把 token 以參數(shù)的形式加入請求。對于 GET 請求,token 將附在請求地址之后,這樣 URL 就變成 http://url?csrftoken=tokenvalue。 而對于 POST 請求來說,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,這樣就把 token 以參數(shù)的形式加入請求了。
如果說這個(gè)Token是指的用戶登錄的憑據(jù),并用以維持登錄狀態(tài)的話,也就是說一個(gè)用戶必須要輸入用戶名密碼并驗(yàn)證通過后,服務(wù)器才會(huì)分配一個(gè)Token,傳回并儲(chǔ)存在客戶端作為憑證(同時(shí)儲(chǔ)存在服務(wù)器上)。因此并不是每個(gè)人都可以獲得這個(gè)Token,只有能提供正確用戶密碼的客戶端才可以。
之后每一次操作,都需要客戶端向服務(wù)器提供這個(gè)Token,以驗(yàn)證登錄狀態(tài),如果考慮安全性的話,還可以增加對User-Agent、IP等信息的驗(yàn)證。
CSRF防范方法:
(1)驗(yàn)證碼
(2)refer頭
(3)Token
說明:理解token的作用,他是一個(gè)隨機(jī)的值,是服務(wù)器端前一個(gè)請求給的,是一次性的,可以防止csrf這種惡意的攜帶自己站點(diǎn)的信息發(fā)請求或者提交數(shù)據(jù)(這個(gè)動(dòng)作一般需要獲取你的前一個(gè)請求的響應(yīng)返回的token值,加大了難度,并不能完全杜絕)。
注意當(dāng)然不能寫到cookie中,因?yàn)闉g覽器在發(fā)出惡意csrf請求時(shí),是自動(dòng)帶著你的cookie的。


浙公網(wǎng)安備 33010602011771號