PHP eval - 评估包含变量的代码

时间:2014-10-15 10:25:37

标签: php eval

我正在建立一个基于模块的CMS,其中管理员也可以创建自定义模块(以及预定义的模块)。自定义模块接受将在显示模块时评估的PHP代码。只有admin(单个或复数)才能编辑此代码,并且只能在admin-page上编辑。*然后将模块的脚本存储在数据库中。

让我们说,例如,自定义模块的编写方式是它从数据库中查询一些信息 - 如果你愿意的话,向管理层发送一条较旧的信息 - 变成一个变量,当然现在用户提交了数据。如果它包含恶意PHP代码,是否有可能以某种方式执行此数据?或者eval处理变量的方式与使用本机PHP代码的方式相同吗?

我包含一个示例,管理员编码列出所有用户提交的消息。

PHP代码为eval()' d

$result = mysqli_query($con, "SELECT msg FROM messages;");

while ($message = mysqli_fetch_array($result))
{
    echo $message['msg'];
}

如果其中一个$message['msg']变量为"; echo "you are screwed"; rmdir('root'),那么会执行还是回显?


*我知道代码可以由任何人编辑#39;如果数据库被泄露,或者代码明确允许用户覆盖其内容,但当然强烈反对。我已经为这些留下了几个警告。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您只是选择并显示数据......因此附加的可能性较小......

$result = mysqli_query($con, "SELECT msg FROM messages;");

while ($message = mysqli_fetch_array($result))
{
    echo $message['msg'];
}

说它是否像......

$result = mysqli_query($con, "SELECT msg FROM messages where some=".$get/post-some.";");

while ($message = mysqli_fetch_array($result))
{
    echo $message['msg'];
}

可能在$getsome中对sql注入进行攻击,例如在结尾或其他类型添加'or 1=1' ...

所以你需要在传递值时使用PDOmysql_real_escape_string ......或者只是准备好的语句......