CSRF保护

一.CSRF基本介绍:

CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题:个人隐私泄露以及财产安全。

二.防止CSRF攻击的基本步骤:

1.后端生成 csrf_token 的值,在前端请求登录或者注册界面的时候将值传给前端,传给前端的方式可能有以下两种:
    (1)在模板中的 From 表单中添加隐藏字段
    (2)将 csrf_token 使用 cookie 的方式传给前端
2.在前端发起请求时,在表单或者在请求头中带上指定的 csrf_token
3.后端在接受到请求之后,取到前端发送过来的 csrf_token,与第1步生成的 csrf_token 的值进行校验
4.如果校验对 csrf_token 一致,则代表是正常的请求,否则可能是伪造请求,不予通过
三.flask中开启CSRF保护实例

提示:而在 Flask 中,CSRFProtect 这个类专门只对指定 app 进行 csrf_token 校验操作,所以开发者需要做以下 几件事情:

  • 生成 csrf_token 的值

  • 将 csrf_token 的值传给前端浏览器

  • 在前端请求时带上 csrf_token 值

1.导入csrf扩展以及生成csrf值的函数


from flask_wtf.csrf import CSRFProtect,generate_csrf

2.开启csrf保护

在creat_app函数中:


 # 开启csrf保护
    CSRFProtect(app)
  1. 将 csrf_token 的值传给前端浏览器(使用请求钩子)

    
    @app.after_request
        def after_request(response):
            # 调用生成csrf的函数
            csrf_token = generate_csrf()
            # 通过cookie值传给前端
            response.set_cookie("csrf_token",csrf_token)
            return response

    4.在前端请求时带上 csrf_token 值

    • 根据登录和注册的业务逻辑,当前采用的是 ajax 请求

    • 所以在提交登录或者注册请求时,需要在请求头中添加 X-CSRFToken 的键值对


    headers: {
        "X-CSRFToken": getCookie("csrf_token")
    },


猜你喜欢

转载自blog.csdn.net/longting_/article/details/80766995