flask——CSRFToken保護

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

1.後端生成 csrf_token 的值,在前端請求登陸或者註冊界面的時候將值傳給前端,傳給前端的方式可能有如下兩種: 
在模板中的 From 表單中添加隱藏字段 
將 csrf_token 使用 cookie 的方式傳給前端 
2.在前端發起請求時,在表單或者在請求頭中帶上指定的 csrf_token 
3.後端在接受到請求以後,取到前端發送過來的 csrf_token,與第1步生成的 csrf_token 的值進行校驗 
4.若是校驗對 csrf_token 一致,則表明是正常的請求,不然多是僞造請求,不予經過

而在 Flask 中,CSRFProtect 這個類專門只對指定 app 進行 csrf_token 校驗操做,因此開發者須要作如下幾件事情: 
生成 csrf_token 的值 
將 csrf_token 的值傳給前端瀏覽器 
在前端請求時帶上 csrf_token 值

生成 csrf_token 的值

# 導入生成 csrf_token 值的函數
from flask_wtf.csrf import generate_csrf
# 調用函數生成 csrf_token
csrf_token = generate_csrf()

將 csrf_token 的值傳給前端瀏覽器 
實現思路:能夠在請求勾子函數中完成此邏輯

@app.after_request
def after_request(response):
    # 調用函數生成 csrf_token
    csrf_token = generate_csrf()
    # 經過 cookie 將值傳給前端
    response.set_cookie("csrf_token", csrf_token)
    return response

在前端請求時帶上 csrf_token 值 
根據登陸和註冊的業務邏輯,當前採用的是 ajax 請求 
因此在提交登陸或者註冊請求時,須要在請求頭中添加 X-CSRFToken 的鍵值對

$.ajax({
    url:"/passport/register",
    type: "post",
    headers: {
        **"X-CSRFToken": getCookie("csrf_token")**
    },
    data: JSON.stringify(params),
    contentType: "application/json",
    success: function (resp) {
        if (resp.errno == "0"){
            // 刷新當前界面
        location.reload()
        }else {
            $("#register-password-err").html(resp.errmsg)
            $("#register-password-err").show()
        }
    }
})

  https://blog.csdn.net/brook_/article/details/80954472html

相關文章
相關標籤/搜索