源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-09-02 20:28 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:php安全开发 添加随机字符串验证,防止伪造跨站请求
yahoo对付伪造跨站请求的办法是在表单里加入一个叫.crumb的随机串;而facebook也有类似的解决办法,它的表单里常常会有post_form_id和fb_dtsg。 比较常见而且也很廉价的防范手段是在所有可能涉及用户写操作的表单中加入一个随机且变换频繁的字符串,然后在处理表单的时候对这个字符串进行检查。这个随机字符串如果和当前用户身份相关联的话,那么攻击者伪造请求会比较麻烦。现在防范方法基本上都是基于这种方法的了 随机串代码实现 咱们按照这个思路,山寨一个crumb的实现,代码如下:
[u]复制代码[/u] 代码如下:
<?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
[u]复制代码[/u] 代码如下:
<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> 
处理表单 demo.php 对crumb进行检查
[u]复制代码[/u] 代码如下:
<?php    if(Crumb::verifyCrumb($uid, $_POST['crumb'])) {        //按照正常流程处理表单    } else {        //crumb校验失败,错误提示流程    } 
本文出自包子博客
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部