证明这个PHP Eval of Function Dangerous

时间:2014-10-23 22:03:46

标签: php security

我正在查看以下代码块,但在这种特定情况下找不到eval如何危险的工作示例。

我意识到eval是危险的,永远不会被使用,总会有更好的方法来做,等等,但是为了我自己的好奇心想要定义这个代码块是如何危险的。

在下面的情况下,$z的值由用户控制,但是单引号(并且 - 据我所知 - 因此无法爆炸另一个变量)。 <{1}}中应用单引号来破坏字符串是不可能的。

$z

2 个答案:

答案 0 :(得分:1)

if你忘了逃避$z然后你总能做一些事情:

$z = '); unlink('/files/importantfile.data');

在您的情况下,除了潜在以外,没有错误会忘记逃避!

答案 1 :(得分:0)

这一切都与代码和数据的分离有关:程序员编写程序代码来指示解释器如何处理以及如何处理数据。代码是活动方,数据是被动方。

现在像eval这样的函数在这两个库之间建立了一个桥梁,并允许像程序代码一样评估数据。

这不是问题,直到应该被解释为代码的数据可以被程序员以外的人操纵,例如。例如,不应该改变程序行为的用户。因为在这种情况下,用户将拥有与程序员相同的权力。

您的代码现在可能很安全。但是稍作改动可能会将其变成一个严重的安全漏洞,允许您网站的任何用户在您的服务器上execute arbitrary PHP code

  

警告 eval()语言构造非常危险因为它允许执行任意PHP代码。 因此不建议使用它。如果您仔细确认除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递给它事先正确验证它。

当您使用eval时,您正在行走的边缘太窄,您不应该尝试在它上面行走。