csrf原理及flask的處理方法

2022-08-21 12:18:08 字數 2053 閱讀 5243

例如,由 ajax 傳送的 post 請求,然而它背後並沒有表單。在 flask-wtf 0.9.0 以前的版本你無法獲得 csrf 令牌。這是為什麼我們要實現 csrf。

①使用者正常登入a銀行**,

②a**返回cookie資訊給使用者,瀏覽器儲存cookie資訊

③在a**沒有退出登入的情況下(或者說cookie資訊沒過期), 登入了惡意**b

⑤在使用者主觀未知的情況下,訪問a**,此時瀏覽器會自動攜帶cookie資訊

⑥a**識別到cookie資訊,預設為是使用者本人做出的請求,根據請求做出相應的操作.

⑦使用者收到損失.

根據 csrf_token 校驗原理,具體操作步驟有以下幾步:

1.後端生成 csrf_token 的值,在前端請求登入或者註冊介面的時候將值傳給前端,傳給前端的方式可能有以下兩種:

在模板中的 from 表單中新增隱藏字段

將 csrf_token 使用 cookie 的方式傳給前端

2.在前端發起請求時,在表單或者在請求頭中帶上指定的 csrf_token

3.後端在接受到請求之後,取到前端傳送過來的 csrf_token,與第1步生成的 csrf_token 的值進行校驗

4.如果校驗對 csrf_token 一致,則代表是正常的請求,否則可能是偽造請求,不予通過

然後實現

為了能夠讓所有的檢視函式受到 csrf 保護,需要開啟 csrfprotect 模組:

from flask_wtf.csrf import csrfprotect

像任何其它的 flask 擴充套件一樣,你可以惰性載入它:

from flask_wtf.csrf import csrfprotect

csrf = csrfprotect()

note

需要為 csrf 保護設定乙個秘鑰。通常下,同 flask 應用的 secret_key 是一樣的。

如果模板中存在表單,不需要做任何事情。與之前一樣:

但是如果模板中沒有表單,就需要乙個 csrf 令牌:

無論何時未通過 csrf 驗證,都會返回 400 響應。可以自定義這個錯誤響應:

@csrf.error_handler

def csrf_error(reason):

return render_template('csrf_error.html', reason=reason), 400

建議對所有檢視啟用 csrf 保護。也提供了某些檢視函式不需要保護的裝飾器:

@csrf.exempt

def my_handler():

# ...

return 'ok'

預設情況下也可以在所有的檢視中禁用 csrf 保護,通過設定 wtf_csrf_check_default 為 false,僅僅當需要的時候選擇呼叫 csrf.protect()。這也能夠在檢查 csrf 令牌前做一些預先處理:

def check_csrf():

if not is_oauth(request):

csrf.protect()

在 meta 標籤中渲染 csrf 令牌:

在 script 標籤中渲染同樣可行:

下面的例子採用了在 meta標籤渲染的方式, 在 script 中渲染會更簡單,無須擔心沒有相應的例子。

無論何時,傳送 ajax post 請求,為其新增 x-csrftoken 頭:

var csrftoken = $(『meta[name=csrf-token]').attr(『content')

katex parse error: expected '}', got 'eof' at end of input: …|options|trace)/i.test(settings.type) && !this.crossdomain)

}})

或者這麼寫ajax:

在提交請求時,需要在請求頭中新增 x-csrftoken 的鍵值對:

$.ajax(,

...})

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

攻擊的原理 1.使用者正常登入 a 2.a 向使用者瀏覽器寫入cookies 包含登入資訊 3.使用者在沒有登出的情況下,訪問了 b 攻擊 4.b 偽造了乙個 a 的請求,誘導使用者去點選 如何解決?在表單和cookie中,同時寫入相同的token值,使用者在提交表單時,驗證cookie和表單中 或...

CSRF攻擊原理及防禦

於 一 csrf攻擊原理 csrf是什麼呢?csrf全名是cross site request forgery,是一種對 的惡意利用,csrf比xss更具危險性。想要深入理解csrf的攻擊特性我們有必要了解一下 session的工作原理。session我想大家都不陌生,無論你用.net或php開發過...

CSRF 攻擊原理及防護

csrf 的英文全稱是 cross site request forgery 縮寫也稱 xscf,也被稱之為 one click attack 或者 session riding csrf 和 xss 非常的像,但是它們是有很大的區別的,並且攻擊方式也不一樣 xss 是利用站點內的信任使用者,而 c...