• pythonweb开发中的csrft机制


    环境介绍:

    • python+django

    • python+flask

       

    python中的网站开发中的csrf机制

    前端向服务器发起post请求,从cookies中获取一个csrf_token值,从请求体中重新获取一个csrf_token值,如果两个值相同,则表明csrf验证通过,如果两个值不同,则校验失败。会向前端返回一个状态码403的错误。

    介绍一个简单的csrf攻击流程

    三个服务我们分别假设它的ip:

    • 用户李某:192.168.1.1

    • 银行bank:192.168.1.2

    • 黑客网站:192.169.1.3

      • 用户李某打开浏览器,访问受信任网站bank,输入用户名和密码请求登录网站bank;

      • 在用户信息通过验证后,网站bank产生Cookie信息并返回给浏览器,此时用户登录网站bank成功,可以正常发送请求到网站bank;

      • 用户未退出网站bank之前,在同一浏览器中,打开一个TAB页访问黑客网站;

      • 黑客网站接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点bank;

      • 浏览器在接收到这些攻击性代码后,根据黑客网站的请求,在用户不知情的情况下携带Cookie信息,向网站bank发出请求。网站bank并不知道该请求其实是由黑客发起的,所以会根据用户李某的Cookie信息以李某的权限处理该请求,导致来自黑客的恶意代码被执行。

    因此就有了token的产生:

    • CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户李某的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

    • Ps:

      黑客是可以获取用户浏览器中的关于bank的cookies值但是无法知道这些信息,但是token值一般情况下是随机生成的,这个不确定性,导致黑客必须伪造,如何伪造黑客是不知的,再加上http/https请求中的同源策略,即相同ip,相同域名,相同端口,否则同源策略限制了不同源的网站互相操作资源,而黑客如果自己伪造token往往是不能通过bank网站的验证,因此这样就十分安全了

     

  • 相关阅读:
    2021 3 11 结队博客
    第一周 2021.03.07
    2021 3 5 知识点总结
    2021 3 3 每日总结
    2021 3 2 新学期的第一篇博客
    十天冲刺09
    二阶段之四
    安卓开发之实现手机验证码登录
    安卓布局(三)
    安卓布局(二)
  • 原文地址:https://www.cnblogs.com/pythonyeyu/p/11627081.html
Copyright © 2020-2023  润新知