CSRF-Cross-site Request Forgery

日期: 2008-02-18 来源:TechTarget中国

  什么是CSRF?


  CSRF – Cross-site Request Forgery 字面意思是指跨站点请求伪造,通常用来指 WEB 网站的这一类漏洞,即在某个恶意站点的页面上,促使访问者请求你的网站的某个 URL(通常会用 POST 数据方式),从而达到改变服务器端数据的目的。这一类攻击依赖于你的网页中的表单,脆弱的表单很容易受到攻击。对于你网站中的访问者而言,可能会受到以下攻击:



  • 在你的网站之外记录受攻击者的日志(比如:Slashdot);
  • 修改受攻击者在你的网站的设置(比如:Google);
  • 修改你的硬件防火墙;
  • 使用受攻击者的登录信息在你的网站中发表评论或留言;
  • 通过受攻击者的 IP 地址发表匿名留言;
  • 将资金转移到另一个用户帐号中。
  • CSRF 攻击的典型是那些使用 cookie 记录登录信息的网站,但对于一些允许某个 IP 地址访问的页面(如内部网),这一类攻击也会奏效。

  CSRF 攻击通常会使用到 JavaScript(但不仅限于 JavaScript)实现跨站点自动提交表单--表单数据可以隐藏,提交按钮可以伪装成链接或滚动条。


  如何防笴SRF 漏洞



  • 确定那些接受可改变服务器数据的 CGI 只接受 POST 参数,不接受 GET 参数,一些服务器端语言默认同时接受两种方式提交过来的参数;
  • 确定表单提交处理的是你自己的表单,可以使用一个隐藏字段中存放 MD5 字符串,此字符串是将登录 cookie 数据与服务器端存放的密钥进行 MD5 之后的结果,只有这个 MD5 字符串正确时才接受表单数据;
  • 另外还可以增加一个更为严格的方法:在表单中增加一个时间戳的隐藏字段,并将其包含到 hash 字符串中,如果时间戳超过某个时间,则认为表单已过期。当表单过期时,给出一个方法可以让用户重新提交表单,比如将用户之前填写的数据依旧放入表单中,但使用一个新的 hash 字符串。

  一个 PHP 的表单例子,表单代码:


    $key = ’y8s4Z7m2’; //MD5 加密密钥
  $time = time(); //当前时间
  $hash = md5($time.$key); //hash 字符串
  ?>
  


      

Your name:


     

Comment:


      ” name=hash>
      


  


  表单提交之后的 comment.php 后台处理程序代码:


    $key = ’y8s4Z7m2’; //密钥,与上面的一致
  $expire = 1800; //表单过期时间:半小时
  $my_hash = md5($_POST[’time’].$key); //正确的 hash 字符串
  if ($my_hash != $_POST[’hash’]) //hash 字符串不正确
      die(’非法表单提交。’);
  if (time() – $_POST[’time’] > $expire) {
      //表单已经过期,生成新的时间戳和 hash 字符串,显示表单让用户重新提交。(此处省略)
      //….
  }
  //表单验证通过,可以接受表单提交的数据,并进行其它操作。
  //….
  ?>


  不要以为可以通过 Referer 头信息来保护你的网站用户,使其不受 CSRF 攻击。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐

  • 五大方法减少跨站请求伪造(CSRF)攻击

    你公司网络上的Web应用程序是否容易遭受跨站请求伪造攻击呢?这是一个值得讨论的问题,因为一次成功的CSRF攻击的后果往往是破坏性的。那么如何防范此类攻击呢?

  • Cross-site request forgery简介

    Cross-site request forgery:跨站请求伪造,也被称成为”one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用……

  • CSRF漏洞 VS 网络取证

    CSRF,英文全名为cross-site request forgery,中文字面意思为跨站点请求伪造。攻击者是如何利用CSRF漏洞混淆网络取证调查工作的?

  • 渗透检测中的xss/csrf

    前段时间在Sirdarckcat和Kuza55一起”Owning Ha.ckers.org”中,就是利用xss等的攻击进行渗透(没有成功,但是里面的技术细节值得学习),具体技术细节请参考……