CSRF的理解及Flask和Django的解決方案
阿新 • • 發佈:2020-11-18
CSRF
攻擊的原理
1. 使用者正常登入 網站A 2. 網站A 向用戶瀏覽器寫入cookies(包含登入資訊) 3. 使用者在沒有登出的情況下,訪問了網站B(攻擊網站) 4. 網站B 偽造了一個 網站A 的請求,誘導使用者去點選 5. 使用者在不知情的情況下,點選並對網站A發起請求,網站A並不清楚請求的來源,處理了這個請求,導致被攻擊
如何解決?
# 在表單和cookie中,同時寫入相同的token值,使用者在提交表單時,驗證cookie和表單中(或者請求體中)的# token是否具有,並且一致才能放行。 首先,定位問題,這是由於咱開發程式不健全導致的; 具體解決方法: 1. 後端首先需要開啟第三方框架的CSRF保護, (1) Flask框架,依賴的是 Flask-WTF 拓展。具體實現: from flask_wtf.csrf import CSRFProtect app.config.from_object(Config) CSRFProtect(app) 注意:CSRFProtect只做驗證工作,它對POST,PUT,DELETE和 ???請求做校驗,cookie中的 csrf_token 和表單中的 csrf_token 需要我們自己實現。 (2) Django框架,使用跨站偽造請求攻擊中介軟體 中介軟體 django.middleware.csrf.CsrfViewMiddleware