2014年,PHP中is_numeric函数十六进制绕过漏洞引发了一次安全问题
接下来,我们来分析一下这个漏洞的原理
函数介绍:
is_numeric — 检测变量是否为数字或数字字符串。
函数原型:
bool is_numeric ( mixed $var )
如果 var 是数字或数字字符串则返回 TRUE,否则返回 FALSE。
举例说明:
例程1:
<?php
$v = is_numeric ('58635272821786587286382824657568871098287278276543219876543') ? true : false;
var_dump ($v);
?>
运行输出:bool(true)
说明:这个参数是数字或数字字符串
变换参数继续测试
如果参数是:0xFFFF,运行结果又会怎样呢?
<?php
$v = is_numeric ('0xFFFF') ? true : false;
var_dump ($v);
?>
输出结果:bool(true)
说明他已经把0x这种十六进制的数忽略了,或者转换成了其他进制的数(注:其他进制的数都是数字或数字字符串,唯有十六进制有个x不是数字,八进制的表示是以0开始的,而