1.什麼是CSRF
CSRF
全拼爲Cross Site Request Forgery
,譯爲跨站請求僞造。
CSRF
指攻擊者盜用了你的身份,以你的名義發送惡意請求。
包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......
造成的問題:個人隱私泄露以及財產安全。
2. CSRF具體流程:
3.如何防止CSRF攻擊
- 在客戶端向後端請求界面數據的時候,後端會往響應中的 cookie 中設置 csrf_token 的值
- 在 Form 表單中添加一個隱藏的的字段,值也是 csrf_token
- 在用戶點擊提交的時候,會帶上這兩個值向後臺發起請求
- 後端接受到請求,以會以下幾件事件:
- 從 cookie中取出 csrf_token
- 從 表單數據中取出來隱藏的 csrf_token 的值
- 進行對比
- 如果比較之後兩值一樣,那麼代表是正常的請求,如果沒取到或者比較不一樣,代表不是正常的請求,不執行下一步操作
4.在flask項目中如何解決CSRF
Flask 中, Flask-wtf 擴展有一套完善的 csrf 防護體系,對於我們開發者來說,使用起來非常簡單
演示代碼如下:
設置應用程序的 secret_key
用於加密生成的 csrf_token 的值
只需要在寫好的前端表單代碼中在加一行{{form.csrf_token()}}
app.secret_key = "#此處可以寫隨機字符串#"
<form method="post">
{{ form.csrf_token() }}
{{ form.username.label }} {{ form.username }}<br/>
{{ form.password.label }} {{ form.password }}<br/>
{{ form.password2.label }} {{ form.password2 }}<br/>
{{ form.submit }}
</form>