咨询电话:023-88959644    24小时服务热线:400-023-8809
NEWS CENTER ·
新闻动态
关注中技互联 关注前沿

如何防止伪造跨站请求!

发表日期:2011-09-05    文章编辑:王东    浏览次数:10    标签:

伪造跨站恳求引见

  伪造跨站恳求比拟难以防备,而且危害宏大,攻击者能够经过这种方式恶作剧,发spam信息,删除数据等等。这种攻击常见的表现方式有:

  伪造链接,诱惑用户点击,或是让用户在不知情的状况下访问

  伪造表单,诱惑用户提交。表单能够是躲藏的,用图片或链接的方式假装。

  比拟常见而且也很低价的防备手腕是在一切可能触及用户写操作的表单中参加一个随机且变换频繁的字符串,然后在处置表单的时分对这个字符串停止检查。这个随机字符串假如和当前用户身份相关联的话,那么攻击者伪造恳求会比拟费事。

  yahoo对付伪造跨站恳求的方法是在表单里参加一个叫.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

<input type=\"hidden\" name=\"crumb\" value=\"<?php echo Crumb::issueCrumb($uid)?>\">  
 


  处置表单 demo.php

  对crumb停止检查

<?php if(Crumb::verifyCrumb($uid,    伪造跨站恳求引见
  伪造跨站恳求比拟难以防备,而且危害宏大,攻击者能够经过这种方式恶作剧,发spam信息,删除数据等等。这种攻击常见的表现方式有:
  伪造链接,诱惑用户点击,或是让用户在不知情的状况下访问
  伪造表单,诱惑用户提交。表单能够是躲藏的,用图片或链接的方式假装。
  比拟常见而且也很低价的防备手腕是在一切可能触及用户写操作的表单中参加一个随机且变换频繁的字符串,然后在处置表单的时分对这个字符串停止检查。这个随机字符串假如和当前用户身份相关联的话,那么攻击者伪造恳求会比拟费事。
  yahoo对付伪造跨站恳求的方法是在表单里参加一个叫.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

<input type=\"hidden\" name=\"crumb\" value=\"<?php echo Crumb::issueCrumb($uid)?>\">  

 
 
  处置表单 demo.php
  对crumb停止检查
___FCKpd___2
 
POST[\'crumb\'])) {     //依照正常流程处置表单 } else {     //crumb校验失败,错误提示流程 }

 

如没特殊注明,文章均为中技互联原创,转载请注明来自www.zjcoo.com
上一篇:网站优化这些误区一定要避免 百害而无一利 下一篇:已经是最后一篇了
相关新闻

CopyrightZJCOO technology Co., LTD. All Rights Reserved.    

渝ICP 备11003429号

  • qq客服
  • 公众号
  • 手机版
  • 新浪微博