作家
登录

关于Web安全的三个攻防姿势

作者: 来源: 2017-10-19 09:31:22 阅读 我要评论

CSRF马脚近况

以上3步只是“自娱自乐”,XSS最关键的是第四步。

CSRF这种进击方法在2000年已经被国外的安然人员提出,但在国内,直到06年才开端被存眷,08年,国表里的多个大年夜型社区和交互网站分别爆出CSRF马脚,如:NYTimes.com(纽约时报)、Metafilter(一个大年夜型的BLOG网站),YouTube和百度HI......而如今,互联网上典范多站点仍对此毫无防备,以至于安然业界称CSRF为“沉睡的巨人”。

CSRF的道理

下图简单阐述了CSRF进击的思惟:

看到这里,你也许会说:“如不雅我不知足以上两个前提中的一个,我就不会受到CSRF的进击”。是的,确切如斯,但你不克不及包管以下情况不会产生:

  1. 你不克不及包管你登录了一个网站后,不再打开一个tab页面并拜访别的的网站。
  2. 你不克不及包管你封闭浏览器了后,你本地的Cookie急速过时,你前次的会话已经停止。(事实上,封闭浏览器不克不及停止一个会话,但大年夜多半人都邑缺点的认为封闭浏览器就等于退出登录/停止会话了......)
  3. 上图中所谓的进击网站,可能是一个存在其他马脚的可托任的经常被人拜访的网站。

示例

膳绫擎大年夜概地讲了一下CSRF进击的思惟,下面我将用几个例子具体说说具体的CSRF进击,这里我以一个银行转账的操作作为例子(仅仅是例子,真实的银行网站没这么傻:>)

示例1

银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfe...

危险网站B,它琅绫擎有一段HTML的代码如下:

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

举个栗子:

为什么会如许呢?原因是银行网站A违背了HTTP规范,应用GET请求更新资本。在拜访危险网站B的之前,你已经登录了银行网站A,而B中的<img>以GET的方法请求第三方资本(这里的第三方就是指银行网站了,本来这是一个合法的请求,但这里被造末路分子应用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资本

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

结不雅银行网站办事器收到请求后,认为这是一个更新资本操作(转账操作),所以就急速进行转账操作......

示例2

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

  1. <form action="Transfer.php" method="POST"
  2.  
  3. <p>ToBankId: <input type="text" name="toBankId" /></p> 
  4.  
  5. <p>Money: <input type="text" name="money" /></p> 
  6.  
  7. <p><input type="submit" value=http://developer.51cto.com/art/201710/"Transfer" /></p> 
  8.  
  9. </form>  

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

  1. <?php 
  2.  
  3. session_start(); 
  4.  
  5. if (isset($_REQUEST['toBankId'] && isset($_REQUEST['money'])) 
  6.  
  7.  
  8.    buy_stocks($_REQUEST['toBankId'], $_REQUEST['money']); 
  9.  
  10.  
  11. ?>  

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

是的,这个是我捏造的,如不雅我将真正的充置魅站点隐蔽在此界面上方。我想,聪慧的你已经知道clickjacking的危险性了。

此为题多大年夜在于博客网站。

  1. <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数据的问题。


  推荐阅读

  华为轮值CEO徐直军:应对快速变化的世界

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 在10月15日举办的2017中国治理>>>详细阅读


本文标题:关于Web安全的三个攻防姿势

地址:http://www.17bianji.com/lsqh/38025.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)