Php 是";“返回评估”;恶毒的

Php 是";“返回评估”;恶毒的,php,eval,Php,Eval,根据声明 $someValue = eval("return \$$userSetting;"); $userSetting怎么会有危险?看起来它能做的最糟糕的事情就是暴露变量,但这实际上是它在这段代码中应该做的。有什么方法可以用PHP执行任意代码吗?您可以在那里轻松调用任意函数(更准确地说,是任意表达式): 这将适用于所有(?)php版本 使用php7,它变得更加方便,因为您可以就地调用匿名函数: $userSetting = 'userSetting && (functio

根据声明

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

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

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

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

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

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

$userSetting='userSetting&&(function(){想做什么就做什么})(;'?评估从来都不是一个好的选择。没有良好意图的人可以简单地将新代码注入到您的代码中。如果您需要“动态”返回一个变量,您可以使用变量中变量的概念,这是您试图做的基本操作,但没有邪恶的eval。@shell中的zerkms(
php-a
)我得到
php解析错误:语法错误,php shell代码(1)中意外的“(”):eval()“d代码仅在第1行
@jcunod php>=7。即使您不关心PHP7,也可以执行类似于
&&die(文件获取内容('/etc/passwd'))的操作。
$userSetting = 'userSetting && (function() { do whatever you want })();';