美文网首页中国蓝
CSRF攻击示例

CSRF攻击示例

作者: 陈望_ning | 来源:发表于2019-01-04 09:38 被阅读0次

转自:http://www.cnblogs.com/hyddd/

示例1:

银行网站A,它以GET请求来完成银行转账的操作,如:

http://www.mybank.com/Transfer.php?toBankId=11&money=1000

危险网站B,它里面有一段HTML的代码如下:

  <img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块......

为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中 的<img>以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏 览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com /Transfer.php?toBankId=11&money=1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账 操作),所以就立刻进行转账操作......

示例2:

为了杜绝上面的问题,银行决定改用POST请求完成转账操作。

银行网站A的WEB表单如下:

<form action="Transfer.php" method="POST">  
      <p>ToBankId: <input type="text" name="toBankId" /></p>
      <p>Money: <input type="text" name="money" /></p> 
      <p><input type="submit" value="Transfer" /></p>    
</form>  

后台处理页面Transfer.php如下:

<?php
    session_start();
    if (isset($_REQUEST['toBankId'] && isset($_REQUEST['money']))
    {
        buy_stocks($_REQUEST['toBankId'], $_REQUEST['money']);
    }
  ?>

危险网站B,仍然只是包含那句HTML代码:

  <img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

和示例1中的操作一样,你首先登录了银行网站A,然后访问危险网站B,结果.....和示例1一样,你再次没了1000块~T_T,这次事故的 原因是:银行后台使用了_REQUEST去获取请求的数据,而_REQUEST既可以获取GET请求的数据,也可以获取POST请求的数据,这就造成 了在后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据。在PHP中,可以使用_GET和_POST分别获取GET请求和POST 请求的数据。在JAVA中,用于获取请求数据request一样存在不能区分GET请求数据和POST数据的问题。

示例3:

经过前面2个惨痛的教训,银行决定把获取请求数据的方法也改了,改用$_POST,只获取POST请求的数据,后台处理页面Transfer.php代码如下:

  <?php
    session_start();
    if (isset($_POST['toBankId'] && isset($_POST['money']))
    {
        buy_stocks($_POST['toBankId'], $_POST['money']);
    }
  ?>  

然而,危险网站B与时俱进,它改了一下代码:

<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>  

如果用户仍是继续上面的操作,很不幸,结果将会是再次不见1000块......因为这里危险网站B暗地里发送了POST请求到银行!

总结一下上面3个例子,CSRF主要的攻击模式基本上是以上的3种,其中以第1,2种最为严重,因为触发条件很简单,一 个<img>就可以了,而第3种比较麻烦,需要使用JavaScript,所以使用的机会会比前面的少很多,但无论是哪种情况,只要触发了 CSRF攻击,后果都有可能很严重。

理解上面的3种攻击模式,其实可以看出,CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的

相关文章

  • CSRF攻击示例

    转自:http://www.cnblogs.com/hyddd/ 示例1: 银行网站A,它以GET请求来完成银行转...

  • 谈谈SPA的CSRF问题

    本文示例基于Vue.js + Egg.js 代码参考csrf 目录 示例服务跨域前端攻击 小结 问题 示例 首先 ...

  • 9.1 CSRF攻击

    CSRF攻击: CSRF攻击概述: CSRF(Cross Site Request Forgery, 跨站域请求伪...

  • 最浅显易懂的Django系列教程(41)-CSRF攻击

    CSRF攻击: CSRF攻击概述: CSRF(Cross Site Request Forgery, 跨站域请求伪...

  • 什么是CSRF攻击

    本文分享CSRF是什么与如何防范CSRF攻击 CSRF攻击是什么? CSRF(Cross-site request...

  • CSRF攻击

    除了XSS攻击外,还有一种叫CSRF的攻击不容小视。 什么是CSRF攻击呢? CSRF攻击又称跨站请求伪造,攻击者...

  • 网络安全系列(3) CSRF攻击

    1.CSRF概述 1.2 CSRF 攻击实例 1.3 CSRF 攻击的对象 2.当前防御 CSRF 的几种策略 2...

  • Laravel - CSRF 攻击与防御

    CSRF攻击与防御-start 什么是CSRF攻击?CSRF是跨站请求伪造(Cross-site request ...

  • 2020-06-09--flask05--flask基础05

    登录+转账demo csrf演示 防止csrf攻击策略 flask解决csrf攻击 登录+转账demo 新建web...

  • CSRF攻击防御

    CSRF 攻击的应对之道web安全之token和CSRF攻击CSRF Token 的设计是否有其必要性? CSRF...

网友评论

    本文标题:CSRF攻击示例

    本文链接:https://www.haomeiwen.com/subject/hnthrqtx.html