首页 > Web开发 > 详细

php通过==和!==比较NULL和''结果均为真

时间:2021-04-24 01:21:43      阅读:15      评论:0      收藏:0      [点我收藏+]

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和‘‘结果均为真的问题在于对数据类型的判断,==没有进行数据类型判断,而!==做了数据类型判断。
使用比较运算符时注意==和===,!=和!==。

php通过==和!==比较NULL和''结果均为真

原文:https://www.cnblogs.com/a-qi/p/14695736.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!