CSRF 是什麼
CSRF 即跨站請求僞造,在用戶不知情的狀況下向有漏洞的網站發送請求。例若有正常網站A,惡意網站B, 用戶若對A B 兩個網站都有訪問,B 可能僞造請求到 A,好比提交表單。至於具體的作法還有 CSRF 和 XSS 的區別,我決定另寫一篇。。。django
Django CSRF 主要處理流程
- 請求到達 Django 在調用 view 以前調用 csrf middleware 的 process_view 函數
- process_view 函數檢查是否存在 csrf token, 不存在則設置新的 token
- 若是請求類型不是 '安全的'(見 RFC2616 如 POST),會有幾項檢查:
- 如果 https,# todo
- 若傳入的 token 不存在,返回 403
- 若爲請求類型爲 post,會檢查表單中的 token 與 cookie 中 token 是否一致, 不一致則 403
- 相關的 view 處理完後, 向用戶返回 response 以前 調用 process_response 函數
- process_response 函數取得 request 中的 token 賦給 response 並更新 max_age 等信息
其餘注意的地方
若是用戶在 csrf token 過時前向服務器發出請求那麼這個 token 值 正常狀況下是一直不變的,須要手動更新的話能夠用 rotate_token 函數安全