Php 转义eval变量是否足够安全?

Php 转义eval变量是否足够安全?,php,eval,Php,Eval,从安全角度来看,转义eval变量是否足够安全。例如 $path = "a"; //sample value; is generated dynamically $var = "phpinfo()"; //sample attack value; is generated dynamically eval("\$struct$path = \$var;"); 这对我来说似乎很安全。虽然一开始似乎没有理由使用该代码,但现在它已经存在,没有理由就无法删除它 是否有任何方法($var或$

从安全角度来看,转义eval变量是否足够安全。例如

$path = "a";    //sample value; is generated dynamically
$var = "phpinfo()";     //sample attack value; is generated dynamically
eval("\$struct$path = \$var;");
这对我来说似乎很安全。虽然一开始似乎没有理由使用该代码,但现在它已经存在,没有理由就无法删除它


是否有任何方法($var或$path的任何值)可以打破这个评估,或者我只是担心得太多了:-),这是一个安全的情况???

这取决于
$path
来自哪里。 此值会将其打断:

=0;unlink('/important/file');//

您可能需要eval来实现带有挂钩的插件系统。。。但是您永远不应该使用它执行动态内容(比如phpinfo)。

我不知道您的eval代码实际上应该做什么。但如果只是一个动态变量名,那么类似的东西呢:

extract(array("\$struct$path", "\$var"));

更快。

为什么$var的任何值都应该打破评估,以及如何打破评估?(可能是c/p错误?)你根本不应该使用eval,在我看来,没有它你什么都可以做。不知道你需要它做什么。@Martin-对不起,c/p错误。。现在修好了@试着读一下问题。。我已经提到这是一个遗留系统。。仅仅喊“评估”是不好的,不会改变人们的想法。。给我举个例子。。。我和其他人一样反对eval,但在遗留代码库中,更改需要理由。@pekka组织政策是我被告知的。在你能证明之前,说些废话是不够的。@pekka-好吧,我只能说你在这个世界上还没有看到什么坏事;-)。。试试这个例子。。。即使我同意你的观点,那是愚蠢的,那也不会改变任何事情。。。要做出改变,我需要理由,如果你不能给我理由,那么我现在可以接受我的答案。杰出的在任何情况下,$var都可以破坏它吗?不是在这个评估中,$var的前缀是\。但是如果$structa应该是一个数字(例如MySQL的ID),并且您正在输入一个类似于
”的字符串,那么它将在该字符串上被打断。酷。。所以我认为这是一个安全的评估案例,因为$path是计算出来的,而不是用户输入的。。接受urs作为正确答案。。。谢谢