1. 程式人生 > >CSRF-跨站請求偽造

CSRF-跨站請求偽造

CSRF-跨站請求偽造

CSRF描述

CSRF全拼為Cross Site Request Forgery,譯為跨站請求偽造。借花獻佛、掛羊頭賣狗肉。
造成的問題:個人隱私洩露以及財產安全。
CSRF攻擊示意圖:
在這裡插入圖片描述
主要原因:
  客戶端訪問伺服器時沒有同伺服器做安全驗證

防止 CSRF 攻擊

步驟:

  • 在客戶端向後端請求介面資料的時候,後端會往響應中的 cookie 中設定 csrf_token 的值
  • 在 Form 表單中新增一個隱藏的的欄位,值也是 csrf_token
  • 在使用者點選提交的時候,會帶上這兩個值向後臺發起請求
  • 後端接受到請求,以會以下幾件事件:
    1. 從 cookie中取出 csrf_token
    2. 從 表單資料中取出來隱藏的 csrf_token 的值 進行對比
    3. 如果比較之後兩值一樣,那麼代表是正常的請求,如果沒取到或者比較不一樣,代表不是正常的請求,不執行下一步操作

新增生成 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)