zoukankan      html  css  js  c++  java
  • 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 或者  === 或者 !== 比较.

      

        

  • 相关阅读:
    centos崩溃后如何修复
    乘法是啥
    接上篇—用spring注入DBbean,并使用maven管理
    技术产生价值
    技术?
    世界的本质是啥呢
    java-web 登陆功能
    对java的理解
    数学的历史
    使用jmeter测试接口
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5992189.html
Copyright © 2011-2022 走看看