"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 })();';
鉴于声明
$someValue = eval("return $$userSetting;");
$userSetting
怎么会有危险?看起来它能做的最坏的事情就是暴露变量,但这实际上是它在这段代码中应该做的。有什么方法可以用 PHP 的 variable variables 执行任意代码吗?
您可以在此处轻松调用任意函数(更准确地说是任意表达式):
$userSetting = 'userSetting && print(123)';
这适用于所有 (?) php 版本。
使用 php7 变得更加方便,因为您可以就地调用匿名函数:
$userSetting = 'userSetting && (function() { do whatever you want })();';