01

md5加密漏洞

比较哈希字符串的时候,php程序把每一个以“0x”开头的哈希值都阐明为科学计数法0的多少次方,恒为0。

以是如果两个不同的密码经由哈希往后,其哈希值都因此“0e”开头的,那么php将会认为他们相同。

php常见漏洞这些常见的PHP破绽假如你不知道就别说本身是个攻城狮 jQuery

其余md5加密是有几率两个字符串不同,但是加密后的值是相同的情形,这种情形称为哈希碰撞。

<?php$str1 = 's878926199a';$str2 = 's214587387a'; echo json_encode([ 'md5_str1' => md5($str1), 'md5_str2' => md5($str2), 'bool' => md5($str1) == md5($str2)]);

结果两个值加密后竟然相等。

缺陷你懂的,如果一个网站的某个用户密码加密后刚好是0e开头的,这个时候黑客过来破解,很随意马虎就攻入了。

{ md5_str1: "0e545993274517709034328855841020", md5_str2: "0e848240448830537924465865611904", bool: true}

02

is_numeric漏洞

会忽略0x这种十六进制的数

随意马虎引发sql注入操作,暴露敏感信息

echo json_encode([ is_numeric(233333), is_numeric('233333'), is_numeric(0x233333), is_numeric('0x233333'), is_numeric('233333abc'),]);

结果如下:

16进制数0x61646D696EASII码对应的值是admin。

如果我们实行了后面这条命令的话:SELECT FROM tp_user where username=0x61646D696E,结果不言而喻

[ true, true, true, false, false]

03

in_array漏洞

in_array中是先将类型转为整形,再进行判断。

PHP作为弱类型措辞,类型转换的时候,会有很大漏洞。

转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0。

<?phpvar_dump(in_array("2%20and%20%", [0,2,3]));

结果如下:

bool(true)

04

switch漏洞

switch中是先将类型转为整形,再进行判断。

PHP作为弱类型措辞,类型转换的时候,会有很大漏洞。

转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0。

<?php$i ="abc";switch ($i) { case 0: case 1: case 2: echo "i是比3小的数"; break; case 3: echo "i即是3";}

结果如下:

i是比3小的数。

05

intval强转漏洞

PHP作为弱类型措辞,类型转换的时候,会有很大漏洞。

转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0。

<?phpvar_dump(intval('2')); //2var_dump(intval('3abcd')); //3var_dump(intval('abcd')); //0

以上便是本次分享的所有内容,看完本文对PHP感兴趣的朋友可以考虑六星教诲,官网还有免费试听课可参加!