1、通常情況下,有三種方法可以被用來防御CSRF攻擊:
- 驗證token
- 驗證HTTP請求的Referer
- 驗證XMLHttpRequests里的自定義header
2、測驗驗證上面三種方法的步驟
- 驗證token
注意:token應該要有隨機性和時效性,
時效性:可以等待一段時間后,重新請求是否能請求成功,如果請求成功,那就是有問題
隨機性:每一次token值應該是不一樣的
- 驗證HTTP請求的Referer
fiddler 找到請求的http后,在頭檔案找到refer欄位,編輯后,直接搞為空,或者去掉,修改一下資訊去重新請求,看下是否能請求成功,如果請求成功了,那就是有問題

- 驗證XMLHttpRequests里的自定義header
哈哈哈,我沒試過,等后面有遇到來補充,下面的圖是從別的地方截圖的,等后面再自己來更新,也不知道啥時候能更新

3、referer欄位講解
- 定義:HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器該網頁是從哪個頁面鏈接過來的,服務器因此可以獲得一些資訊用于處理,
- 作用:
1)防盜鏈
比如政務服務器只允許網站訪問自己的靜態資源,那服務器每次都需要判斷Referer的值是否是zwfw.yn.gov.cn,如果是就繼續訪問,不是就攔截,
2)防止惡意請求
比如靜態請求是.html結尾的,動態請求是.shtml,那么所有的*.shtml請求,必須 Referer為我自己的網站才可以訪問,這就是Referer的作用,
3)空Referer?
空Referer是指Referer頭部的內容為空,或者,一個HTTP 請求頭中根本不包含Referer,那么什么時候HTTP請求會不包含Referer欄位呢?
根據Referer的定義,它的作用是指示一個請求是從哪里鏈接過來,那么當一個請求并不是由鏈接觸發產生的,那么自然也就不需要指定這個請求的鏈接來源,
比如,直接在瀏覽器的地址欄中輸入一個資源的URL地址,那么這種請求是不會包含Referer欄位的,因為這是一個“憑空產生”的HTTP請求,并不是從一個地方鏈接過去的,
4、token欄位
- 定義
Token是服務端生成的一串字串,以作客戶端進行請求的一個令牌,當第一次登錄后,服務器生成一個Token便將此Token回傳給客戶端,以后客戶端只需帶上這個Token前來請求資料即可,無需再次帶上用戶名和密碼,
- 基于token的驗證方法
- 使用基于 Token 的身份驗證方法,在服務端不需要存盤用戶的登錄記錄,流程是這樣的:
客戶端使用用戶名跟密碼請求登錄
服務端收到請求,去驗證用戶名與密碼
驗證成功后,服務端會簽發一個 Token,再把這個 Token 發送給客戶端
客戶端收到 Token 以后可以把它存盤起來,比如放在 Cookie 里或者 Local Storage 里
客戶端每次向服務端請求資源的時候需要帶著服務端簽發的 Token
服務端收到請求,然后去驗證客戶端請求里面帶著的 Token,如果驗證成功,就向客戶端回傳請求的資料
APP登錄的時候發送加密的用戶名和密碼到服務器,服務器驗證用戶名和密碼,如果成功,以某種方式比如隨機生成32位的字串作為token,存盤到服務器中,并回傳token到APP,以后APP請求時,
凡是需要驗證的地方都要帶上該token,然后服務器端驗證token,成功回傳所需要的結果,失敗回傳錯誤資訊,讓他重新登錄,其中服務器上token設定一個有效期,每次APP請求的時候都驗證token和有效期, - 參考:https://www.cnblogs.com/lufeiludaima/p/pz20190203.html
本人QQ:3461838632
一名學習測驗3年,作業4年菜鳥測驗工程師,有問題可以加QQ私聊哈,可以交流測驗的相關問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234841.html
標籤:其他
