PHP的强制转换的几种方法
PHP中的强制转换要在转换的变量前加上用括号括起来的目标类型,还可以使用函数settype(),代码0x1.php如下
还可以使用intval() floatval() strval() 函数进行强制转换,代码0x2.php如下
当我们需要对变量进行强制类型转换时,通过以上方法,如若使用不当均会导致安全漏洞。
(二)模拟测试
我们对漏洞代码进行模拟测试,intval强制转换示例代码0x3.php:
运行结果:
123a and 1=1
123
$a并未被转换未整型,而是原样输出来了。相应的我们$a_safe才真正被强制转换了。
int强制转换示例代码0x4.php:
运行结果:
123b and 1=2
123
$b并未被转换为整型,还是原样输出来了。相应$b_safe被转换。
把上述安全隐患带入PHP的流程控制
If 示例代码0x5.php:
运行结果:
123.3c
123.3
我们可以看到第一个if判断条件并未将$c转换未浮点型数值,相应$c_safe被转换了。
switch 示例代码0x6.php:
运行结果:
123.3dIt's not safe
123It's safe
$d在switch中并未被转换为整型,还是原样输出。而$d_safe则被转换了。
while 示例代码0x7.php
运行结果:
Parse error: parse error in D:\xampp\htdocs\80vul\src\0x7.php on line 2
while中的判断永远为真,引起死循环,但$e并未被强制转换未整型。
经测试,得出结论,由于变量都是经过强制类型转换后,返回的值并未赋给某个变量,所以均存在漏洞隐患。