CSRF-跨站請求偽造
阿新 • • 發佈:2018-11-24
CSRF-跨站請求偽造
CSRF描述
CSRF全拼為Cross Site Request Forgery,譯為跨站請求偽造。借花獻佛、掛羊頭賣狗肉。
造成的問題:個人隱私洩露以及財產安全。
CSRF攻擊示意圖:
主要原因:
客戶端訪問伺服器時沒有同伺服器做安全驗證
防止 CSRF 攻擊
步驟:
- 在客戶端向後端請求介面資料的時候,後端會往響應中的 cookie 中設定 csrf_token 的值
- 在 Form 表單中新增一個隱藏的的欄位,值也是 csrf_token
- 在使用者點選提交的時候,會帶上這兩個值向後臺發起請求
- 後端接受到請求,以會以下幾件事件:
- 從 cookie中取出 csrf_token
- 從 表單資料中取出來隱藏的 csrf_token 的值 進行對比
- 如果比較之後兩值一樣,那麼代表是正常的請求,如果沒取到或者比較不一樣,代表不是正常的請求,不執行下一步操作
新增生成 csrf_token 的函式
#生成 csrf_token 函式
def generate_csrf():
return bytes.decode(base64.b64encode(os.urandom(48)))
在 Flask 專案中解決 CSRF 攻擊
在 Flask 中, Flask-wtf 擴充套件有一套完善的 csrf 防護體系,對於我們開發者來說,使用起來非常簡單
在 FlaskForm 中實現校驗
設定應用程式的 secret_key
用於加密生成的 csrf_token 的值
app.secret_key = “#隨機字串#”
匯入 flask_wtf.csrf 中的 CSRFProtect 類,進行初始化,並在初始化的時候關聯 app
from flask.ext.wtf import CSRFProtect
CSRFProtect(app)