zoukankan      html  css  js  c++  java
  • 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/80954472

  • 相关阅读:
    Git命令branch-分支
    Git基础命令(二)
    Git基础命令(一)
    【转载】Android状态栏微技巧,带你真正理解沉浸式模式
    Android性能分析工具
    【转载】Android卡顿检测方案
    WebView loadData中文乱码
    【Cocos2dx】新建场景、场景的切换、设置启动场景与菜单的新建
    Cocos2d-JS切换场景与切换特效
    COCOS2DX场景切换特效
  • 原文地址:https://www.cnblogs.com/hedianzhan/p/9769120.html
Copyright © 2011-2022 走看看