"return eval"是邪恶的吗?

Is "return eval" evil?

鉴于声明

$someValue = eval("return $$userSetting;");

$userSetting怎么会有危险?看起来它能做的最坏的事情就是暴露变量,但这实际上是它在这段代码中应该做的。有什么方法可以用 PHP 的 variable variables 执行任意代码吗?

您可以在此处轻松调用任意函数(更准确地说是任意表达式):

$userSetting = 'userSetting && print(123)';

这适用于所有 (?) php 版本。

使用 php7 变得更加方便,因为您可以就地调用匿名函数:

$userSetting = 'userSetting && (function() { do whatever you want })();';