今日免费次数已满, 请开通会员/明日再来
这显然是一个简化的情况,但有没有什么用户可以输入作为
$version = $_REQUEST['version'];
$test = 'return $version > 3;';
$success = eval($test);
这显然是一个简化的情况,但有没有什么用户可以输入作为
version
来执行恶意操作?如果我限制了$test
可以采用的字符串类型,将某些变量的值与其他变量进行比较,是否有任何人可以看到利用这一点的方法?
编辑
我已经尝试在服务器上运行以下脚本,但没有任何反应:<?php
$version = "exec('mkdir test') + 4";
$teststr = '$version > 3;';
$result = eval('return ' . $teststr);
var_dump($result);
?>
我只得到了bool(false)
。没有创建新目录。如果我在这之前有一行实际调用exec('mkdir test')
的代码,它就会真正地创建目录。看起来它的工作方式是正确的,它只是将一个转换为数字的字符串与另一个数字进行比较,并发现结果为false。
$success = eval($test)
的效果与 JavaScript 不同。您需要在 evaled 字符串中进行赋值操作。 - Pekka