弱类型问题
类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。
如果在用于密码比对,身份验证中没有对类型进行强处理,往往会导致对比成功,身份伪造等等。
常见的弱类型对比
数字型与其对应的字符串
- 0 == ‘0’ => true
0 与 不包含任何数字字符串
- 0 == ‘abc’ => true
数字型与其在前缀的字符串
- 1 == ‘1abc’ => true
数学计算运算
- ‘1e0’==‘1e2’ => true
- “10” == “1e1” => true
- ‘0e10’ == ‘0e1000’ => true
- ‘0x001’==‘1’ => true
- md5(‘s878926199a’) == 0 => true
- 这里是 md5(‘s878926199a’) 的值是 0e 开头 。和上面第一种一样
- 更多0e的哈希看这里 PHP处理0e开头md5哈希字符串缺陷/bug