我正在查看以下代码块,但在这种特定情况下找不到eval如何危险的工作示例。
我意识到eval是危险的,永远不会被使用,总会有更好的方法来做,等等,但是为了我自己的好奇心想要定义这个代码块是如何危险的。
在下面的情况下,$z
的值由用户控制,但是单引号(并且 - 据我所知 - 因此无法爆炸另一个变量)。 <{1}}中应用单引号来破坏字符串是不可能的。
$z
答案 0 :(得分:1)
好if
你忘了逃避$z
然后你总能做一些事情:
$z = '); unlink('/files/importantfile.data');
在您的情况下,除了潜在以外,没有错误会忘记逃避!
答案 1 :(得分:0)
这一切都与代码和数据的分离有关:程序员编写程序代码来指示解释器如何处理以及如何处理数据。代码是活动方,数据是被动方。
现在像eval
这样的函数在这两个库之间建立了一个桥梁,并允许像程序代码一样评估数据。
这不是问题,直到应该被解释为代码的数据可以被程序员以外的人操纵,例如。例如,不应该改变程序行为的用户。因为在这种情况下,用户将拥有与程序员相同的权力。
您的代码现在可能很安全。但是稍作改动可能会将其变成一个严重的安全漏洞,允许您网站的任何用户在您的服务器上execute arbitrary PHP code:
警告
eval()
语言构造非常危险因为它允许执行任意PHP代码。 因此不建议使用它。如果您仔细确认除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递给它事先正确验证它。
当您使用eval
时,您正在行走的边缘太窄,您不应该尝试在它上面行走。