因为PHP是弱类型语言,所以内置的很多函数,在进行转换和比较的时候,会有各种漏洞需要关注。
1、md5加密漏洞
比较哈希字符串的时候,php程序把每一个以0x开头的哈希值都解释为科学计数法0的多少次方,恒为0
所以如果两个不同的密码经过哈希以后,其哈希值都是以0e开头的,那么php将会认为他们相同。
另外md5加密是有几率两个字符串不同,但是加密后的值是相同的情况,这种情况称为哈希碰撞
结果如下,两个值加密后竟然相等
缺点你懂的,如果一个网站的某个用户密码加密后刚好是0e开头的,这个时候黑客过来破解,很容易就攻入了。
2、is_numeric漏洞
会忽视0x这种十六进制的数
容易引发sql注入操作,暴漏敏感信息
结果如下
16进制数0x61646D696EASII码对应的值是admin
如果我们执行了后面这条命令的话:SELECT * FROM tp_user where username=0x61646D696E,结果不言而喻
3、in_array漏洞
in_array中是先将类型转为整形,再进行判断
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0
结果如下
4、switch漏洞
switch中是先将类型转为整形,再进行判断
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0
结果如下
5、intval强转漏洞
看完本文有收获?点赞、分享是最大的支持!