1.强比较与弱比较

弱比较:a==b
强比较:a===b
a==b,先将a和b的值转化为同类型在进行比较
a===b,先比较a和b的类型,在比较他们的值

2.弱比较和绕过

弱比较

字符型和数值型的弱比较

数字型和数字型或字符型和字符型进行比较时,为同类型,直接比较
数字型和字符型进行比较时:
1.若字符型以数字开头,转化为数字型
"123abc"==123,ture
2.开头不为数字,转化为为null 弱比较与 0 相等
"abc123"==123,false,"abc123"==0,ture

布尔型和任意型的比较

布尔值true和任意字符串和数值都弱相等,除了0和false
因为0也认为是false,而ture不等于false
(ture==123),ture
(ture==abc),ture
(ture==false/0),false
(false==0),ture

绕过

科学计数法绕过

php中表示10的幂通常是用e或E,如2000000 = 2*10^6 = 2e6
所以0e,无论后面跟什么值,都是0
常见md5值为0e开头的字符串

   md5                          原值
QNKCDZO           0e830400451993494058024219903391
240610708         0e462097431906509019562988736854
s878926199a       0e545993274517709034328855841020
s155964671a       0e342768416822451524974117254469
s1184209335a      0e072485820392773389523109082030

数组绕过

md5不能处理数组,如 a[]=1,b[]=1,传入数组会报错,但会继续执行并且返回结果为null
如:md5(a[]=1)==md5(b[]=2),实际上是null==null

强比较与绕过

强比较

没什么好说的

绕过

两个MD5值完全相同的字符
array1=%d1%31%dd%02%c5%e6%ee%c4%69%3d%9a%06%98%af%f9%5c%2f%ca%b5%87%12%46%7e%ab%40%04%58%3e%b8%fb%7f%89%55%ad%34%06%09%f4%b3%02%83%e4%88%83%25%71%41%5a%08%51%25%e8%f7%cd%c9%9f%d9%1d%bd%f2%80%37%3c%5b%d8%82%3e%31%56%34%8f%5b%ae%6d%ac%d4%36%c9%19%c6%dd%53%e2%b4%87%da%03%fd%02%39%63%06%d2%48%cd%a0%e9%9f%33%42%0f%57%7e%e8%ce%54%b6%70%80%a8%0d%1e%c6%98%21%bc%b6%a8%83%93%96%f9%65%2b%6f%f7%2a%70

array2=%d1%31%dd%02%c5%e6%ee%c4%69%3d%9a%06%98%af%f9%5c%2f%ca%b5%07%12%46%7e%ab%40%04%58%3e%b8%fb%7f%89%55%ad%34%06%09%f4%b3%02%83%e4%88%83%25%71%41%5a%08%51%25%e8%f7%cd%c9%9f%d9%1d%bd%f2%80%37%3c%5b%d8%82%3e%31%56%34%8f%5b%ae%6d%ac%d4%36%c9%19%c6%dd%53%e2%b4%87%da%03%fd%02%39%63%06%d2%48%cd%a0%e9%9f%33%42%0f%57%7e%e8%ce%54%b6%70%80%a8%0d%1e%c6%98%21%bc%b6%a8%83%93%96%f9%65%2b%6f%f7%2a%70