`

怎样防止伪造跨站请求

 
阅读更多
转自:http://www.yunsec.net/a/security/web/xtaq/2012/0107/9850.html

介绍
伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。这种攻击常见的表现形式有:
伪造链接,引诱用户点击,或是让用户在不知情的情况下访问
伪造表单,引诱用户提交。表单可以是隐藏的,用图片或链接的形式伪装。
比较常见而且也很廉价的防范手段是在所有可能涉及用户写操作的表单中加入一个随机且变换频繁的字符串,然后在处理表单的时候对这个字符串进行检查。这个随机字符串如果和当前用户身份相关联的话,那么攻击者伪造请求会比较麻烦。
对付伪造跨站请求的办法是在表单里加入一个叫.crumb的随机串;而facebook也有类似的解决办法,它的表单里常常会有post_form_id和fb_dtsg。


随机串代码实现
步骤/方法
随机串代码实现
咱们按照这个思路,山寨一个crumb的实现,代码如下:
<?php
  class Crumb {
  CONST SALT = “your-secret-salt”;
  static $ttl = 7200;
  static public function challenge($data) {
  return hash_hmac(‘md5′, $data, self::SALT);
  }
  static public function issueCrumb($uid, $action = -1) {
  $i = ceil(time() / self::$ttl);
  return substr(self::challenge($i . $action . $uid), -12, 10);
  }
  static public function verifyCrumb($uid, $crumb, $action = -1) {
  $i = ceil(time() / self::$ttl);
  if(substr(self::challenge($i . $action . $uid), -12, 10) == $crumb ||
  substr(self::challenge(($i – 1) . $action . $uid), -12, 10) == $crumb)
  return true;
  return false;
  }
  }
?>
代码中的$uid表示用户唯一标识,而$ttl表示这个随机串的有效时间。
构造表单
在表单中插入一个隐藏的随机串crumb


<form method=”post” action=”demo.php”> <input type=”hidden” name=”crumb” value=”<?php echo Crumb::issueCrumb($uid)?>”> <input type=”text” name=”content”> <input type=”submit”> </form>

对crumb进行检查
<?php
  if(Crumb::verifyCrumb($uid, $_POST['crumb'])) {
  //按照正常流程处理表单
  } else {
  //crumb校验失败,错误提示流程
  }
?>
分享到:
评论

相关推荐

    防止伪造跨站请求

    标题中的“防止伪造跨站请求”指的是Web应用安全领域中的CSRF(Cross-Site Request Forgery,跨站请求伪造)防护。CSRF攻击是利用用户的已登录状态,诱使用户在不知情的情况下执行非预期的操作,例如转移资金、更改...

    Tomcat怎样防止跨站请求伪造(CSRF) 1

    Tomcat 防止跨站请求伪造(CSRF)机制浅析 在 Web 应用开发中,跨站请求伪造(CSRF)是一种常见的安全威胁。跨站请求伪造攻击是指攻击者诱骗受信任用户访问恶意网站,从而使得恶意网站能以用户身份对受信任网站执行...

    CSRF跨站请求伪造实例程序

    CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的网络安全威胁,攻击者通过诱导用户在不知情的情况下执行非预期的操作,如修改账户设置、进行非法转账等。在这个"CSRF跨站请求伪造实例程序"中,我们将...

    csrf跨站请求伪造简单示例

    一个简单的csrf跨站请求伪造的示例,只有一个简单的表单提交功能.通过伪造表单提交,完成一个简单的钓鱼案例

    【ASP.NET编程知识】浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法.docx

    浅谈 ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法 本文档对 ASP.NET MVC 中防止跨站请求伪造(CSRF)攻击的实现方法进行了详细的探讨。首先,文章介绍了 CSRF 攻击的定义和历史,然后通过一个模拟的示例,...

    php中防止伪造跨站请求的小招式

    伪造跨站请求介绍 伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。这种攻击常见的表现形式有: 伪造链接,引诱用户点击,或是让用户在不知情的情况下访问 伪造...

    论文研究-跨站请求伪造(CSRF)攻击与防范技术研究 .pdf

    跨站请求伪造(CSRF)攻击与防范技术研究,刘雅楠,马兆丰,跨站请求伪造(CSRF)攻击作为最严重的web漏洞威胁之一被列入了开放Web应用安全项目(OWASP)十大漏洞列表。该攻击具有很大隐蔽性和危

    CSRF跨站请求伪造,含使用教程和测试工具

    CSRF跨站请求伪造,使用OWASP CSRFTester工具可以抓取并伪造请求,其测试原理是,使用代理抓取我们在浏览器中访问过的所有的连接以及所有的表单等信息,通过在CSRFTester中修改相应的表单等信息,重新提交,相当于一...

    php安全开发 添加随机字符串验证,防止伪造跨站请求

    因此,防止伪造跨站请求是Web应用安全的重要一环。 为了防范CSRF攻击,一种常见的方法是使用随机字符串验证。这种技术通常涉及在表单中添加一个与用户身份相关联的、随时间变化的随机字符串,即“CSRF Token”。当...

    springmvc处理csrf伪造跨站请求

    通过token校验,处理可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务

    Ajax与跨站点请求伪造漏洞

    ### Ajax与跨站点请求伪造(Cross-Site Request Forgery, XSRF)漏洞详解 #### 一、背景介绍 在互联网应用开发过程中,安全性一直是不容忽视的重要方面。随着Ajax技术的普及,它带来的便利性同时也引入了一些新的...

    qingmvc#qingmvc#CSRF-跨站请求伪造1

    Cross-site request forgery 跨站请求伪造常见的跨站请求伪造:微博关注操作:get,访问一条链接就关注成功 【除非是某种不受限的api】

    跨站请求伪造-CSRF防护方法

    跨站请求伪造-CSRF防护方法 CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的Web攻击方式,攻击者可以欺骗用户浏览器,发出恶意请求,危害用户的安全。因此,防御CSRF攻击非常重要。下面将对CSRF攻击...

    防跨站伪造测试代码

    在IT行业中,跨站伪造(Cross-Site Request Forgery,简称CSRF)是一种常见的网络攻击方式,它利用用户的登录状态来执行非用户意愿的操作。针对这种情况,开发人员需要采取有效的防御措施,Spring框架为此提供了内置...

    东南大学网络空间安全实验基础——跨站请求伪造攻击实验

    东南大学网络空间安全实验基础——跨站请求伪造攻击实验 本实验报告主要讲述了跨站请求伪造攻击(CSRF)的原理和防御方法。CSRF 攻击是一种常见的网络攻击方式,攻击者可以通过欺骗用户来访问恶意网站,从而达到...

    php漏洞之跨网站请求伪造与防止伪造方法

    跨站请求伪造(Cross-Site Request Forgery,简称CSRF)是一种网络安全漏洞,攻击者通过诱导用户在未经许可的情况下执行非预期的操作,从而达到恶意目的。在PHP开发中,了解并防止这种攻击至关重要。 首先,我们...

    CSRF跨站请求伪造CSRF PHP demo代码

    CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者通过诱导用户在已登录的网站上执行非预期的操作。在这个PHP demo中,我们将深入理解CSRF攻击的原理,并探讨如何防范。 首先,让我们看...

Global site tag (gtag.js) - Google Analytics