在代码审查期间,我发现了类似的内容:
function foo() {
$a = "a";
$expression = '$_GET["$a"]';
return eval('return ('.$expression.');');
}
$a = foo();
echo $a;
别介意废话,这个例子被简化了,由于糟糕的设计决策,客户“真的”需要“return eval”指令。
我的猜测是否定的,因为$expressionis not $_GET["$a"],而是一个表示变量名称的字符串,所以 to 的参数eval()相当于一个“返回字符串”。
但根据 PHP 手册:
当通过引用返回时,你不应该在你的返回变量周围使用括号,因为这不起作用。您只能通过引用返回变量,而不是语句的结果。如果你使用
return ($a);then 你不是返回一个变量,而是表达式的结果($a)(当然是 的值$a)。
有没有办法可以利用它?