slim框架中防止crsf攻击时,用到的函数hash_equals

  1.防止crsf攻击的最多解决方案就是 为每个请求生成一个唯一 token ,验证来源于客户端 HTML 表单产生的 POST等请求 . 

  2.这个token默认放在session中.

  slim框架源码中生成方式 如下:

1 <?php
2 //生成name和token
3 $name =  uniqid($this->prefix);
4 $token =  bin2hex(random_bytes($this->strength)); //strength是一个大于16的数字
5 
6 $_SESSION['crsf'][$name] = $token;

  验证的时候,如果存在hash_equals函数,会优先这种方式

1  //通过$name获取到对应的值$token,  $value为表单提交获取的
2  if (function_exists('hash_equals')) {
3             //hash_equals如果不等返回false
4             $result = ($token !== false && hash_equals($token, $value));
5 } else {
6             $result = ($token !== false && $token === $value);
7 }

  至于为什么先用hash_equals的方案,有什么鸟用,表式不理解.

  查了下相关文档,和密码哈希比对安全有关, 具体可以 看 

  http://bobao.360.cn/learning/detail/398.html

  https://blog.whitehatsec.com/magic-hashes/

  文章里面大概就是说 如果用 双等号"=="比较密码哈希(十六进制有很小的几率会出现问题), 可以通过 hash_equals 或者  === 或者 !== 比较.

  

    

原文地址:https://www.cnblogs.com/loveyouyou616/p/5992189.html