PHP安全添加随机字符串验证,跨站点请求伪造预防
雅虎是应对跨站请求伪造加入A.屑随机字符串的形式的方式;而脸谱网也有类似的解决方案,往往有post_form_id fb_dtsg及其形式。一个更常见的廉价的预防措施是添加一个随机多变的字符串的所有形式,可能涉及用户的写操作,然后检查字符串处理的形式。如果这个随机字符串与当前用户身份关联,它会更麻烦的攻击者伪造的请求。现在预防方法基本上都是基于该方法。
随机串行代码实现
我们遵循这个想法,山村一块屑的实现,代码如下:
复制代码代码如下所示:
< PHP
类屑{
常量盐=你的秘密盐;
静态$ = 7200;
静态公共函数挑战($数据){
返回hash_hmac('md5 ',美元的数据,自::盐);
}
静态公共功能issuecrumb($ UID,$行动= 1){
我=细胞(时间() /::$ TTL);
返回substr(自::挑战美元美元(即行动。$ UID),12, 10);
}
静态公共功能verifycrumb(美元美元美元的UID,碎屑,行动= 1){
$i = ceil (time () / self:: $ttl);
如果(substr(自::挑战美元美元(即行动。$ UID),12, 10)= = $屑| |
substr(自::挑战(($我- 1)。为行动。$ UID),12, 10)= = $屑)
返回true;
返回false;
}
}
代码中的$ UID代表用户的独特身份,和$ TTL表示的随机字符串的有效时间。
应用实例
结构形式
在表格中插入一个隐藏的随机面包屑串。
复制代码代码如下所示:
>
处理的形式demo.php
检查点
复制代码代码如下所示:
< PHP
如果(面包屑::verifycrumb($ UID,_post美元{ 'crumb ' })){
按照正常形式处理
{人}
{面包屑检测失败,错误提示进程
}
这篇文章来自包子博客。