php本身是一种弱语言,这个特性决定了它的两个特点:
php中的判断有两种:



在两种情况下,会导致变量原值不同但 md5 或 sha1 相同
1、md5值以 0e 开头的全部相等(==判断)
原理:0 的多少次方都等于零,因此当两个数的md5值都以为0e开头时,宽松判断会相等
示例:240610708和ONKCDZ0的md5值相似,但并不相同,在"=="相等操作符的运算下,结果会返回true(sha1和Md5一样)


2、数组绕过(===判断 或 ==判断)
原理:md5和sha1对一个数组进行加密将返回NULL;而NULL===NULL返回true,所以可绕过判断
示例:
- if($_GET['a'] !== $_GET['b']){
- if(md5($_GET['a']) === md5($_GET['b'])){
- echo "flag";
- }
- }
- ?>
?a[]=1&b[]=2