zoukankan      html  css  js  c++  java
  • php通过==和!==比较NULL和''结果均为真

    0x01 前言

    在做一道md5()的CTF题目时,代码如下:

      include_once "flag.php";
      ini_set("display_errors", 0);
      $str = strstr($_SERVER['REQUEST_URI'], '?');
      $str = substr($str,1);
      $str = str_replace('key','',$str);
      parse_str($str);
      echo md5($key1);
    
      echo md5($key2);
      if(md5($key1) == md5($key2) && $key1 !== $key2){
          echo $flag."取得flag";
      }
    

    提交参数“?kkeyey1=”即可得到flag,对此感到疑惑,便进行了简单测试。

    0x02 PHP比较运算符


    ==只对值做判断,比如5=="5"结果为真;===绝对等于,会判断数据类型和值,5==="5"结果为假;!==绝对不等于也会判断数据类型。

    0x03

    提交的参数最后被处理为key1='',key2为NULL。
    ''和NULL使用md5()进行加密后的MD5值是相同的,都是“d41d8cd98f00b204e9800998ecf8427e”

    因此MD5值比较验证通过。
    题目代码中使用了绝对不等于(!==)对key1和key2的原始值进行判断,''的类型为String,NULL的类型为NULL所以 ''!==NULL 的结果为真。

    0x04 总结

    关于通过==和!==比较NULL和''结果均为真的问题在于对数据类型的判断,==没有进行数据类型判断,而!==做了数据类型判断。
    使用比较运算符时注意==和===,!=和!==。

  • 相关阅读:
    字符编码笔记:ASCII,Unicode 和 UTF-8
    nginx 负载均衡设置
    ubuntu 修改时区
    js 高阶函数 filter
    js 高阶函数 map reduce
    省市联级菜单--js+html
    php代码优化技巧
    json、xml ---- 数据格式生成类
    初识设计模式(1)---单例、工厂、注册树
    php 链式操作的实现 学习记录
  • 原文地址:https://www.cnblogs.com/a-qi/p/14695736.html
Copyright © 2011-2022 走看看