1. 程式人生 > 實用技巧 >CSRF的理解及Flask和Django的解決方案

CSRF的理解及Flask和Django的解決方案

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