csrf笔记

73 阅读1分钟

csrf攻击主要是利用浏览器发请求时会自动带上域名下的cookie(目前新版本浏览器已加了限制),而cookie里可能存着session信息。

例如: A网站里有一段代码

<img src="https://www.demo.com/api/xxx" />

你在访问A网站时,浏览器会自动向www.demo.com/api/xxx 发送一个get请求,且会带上www.demo.com域名下的cookie。

再例如:

<html>
  <head>
       <script type="text/javascript">
      function load()
      {
               var iframe = document.frames["load"];
               iframe.document.Submit("form");
      }
    </script>
  </head>

  <body onload="load()">
    <iframe name="load" display="none">
      <form method="POST" name="form" action="https://www.demo.com/api/xxx">
        <input type="hidden" name="a" value="1">
        <input type="hidden" name="b" value="2">
      </form>
    </iframe>
  </body>
</html>

你在访问此网站时,浏览器会自动向www.demo.com/api/xxx 发送一个Post请求,且会带上www.demo.com域名下的cookie。

如何预防

不要用cookie session的方式存用户身份信息,而使用token的方式。把token加到自定义header里或者请求参数里传给服务端。浏览器发请求时是不可能自动加token-header或者参数的,所以就避免了csrf问题。