php中的一个有关数组和判断的问题

PHP在比较中用 ==来比较值是否相等, 用 === 来比较值和类型是否相等。 但在现实条件中,可能会发生意外情况,这个是值得开发者注意的。

<?php

$flag = 'Wel come to CIA';
if($_GET['a'] != $_GET['b'])
{
    if(md5($_GET['a']) === md5($_GET['b']))
    {
        echo '007'.$flag;
    }
}

比如,程序员通过 ===比较值和类型并判断md5后的信息是否一致,一致后输出欢迎信息,直接给a和b赋值不一样信息的话,第一个条件满足,但是第二个条件又不满足了,所以这个时候可以利用数组和===的一个特性,a[] = 1; b[] = 2; 肯定是true的。 到了md5里面,因为a、b里面传入的都为array,所以均为NULL,

echo gettype(md5(array(‘1,2,3’)));//md5传入array结果为 NULL

NULL === NULL;就这么造成了漏洞。理论上来说任何判断条件下都有可能出现这种问题,当类型不支持时,加密就变成了false,而false正好又等于false,这个时候就没有了值只有类型,当只有类型时,就只比较类型,所以 === 比较值和类型也不是绝对的。 这个很久以前就有人说过,没怎么注意过,今天进行了实验。 以此进行延伸

即使不输入任何信息,比较也是相等的,原因就是同理。