PHP评估包含变量的代码



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

比方说,一个自定义模块的编写方式是,它将数据库中的一些信息(如果你愿意的话,这是给管理层的一条旧消息)查询到一个变量中,当然现在是用户提交的数据。如果这些数据包含恶意php代码,是否可能以某种方式被执行?或者eval处理变量的方式与处理原生PHP代码的方式相同?

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

要评估的PHP代码

$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'),会执行还是回显?


*我知道,如果数据库被破坏,或者代码明确允许用户覆盖其内容,"任何人"都可以编辑代码,但当然强烈反对这样做。我已经为这些留下了几条警告。

在这种情况下,您只是选择并显示数据。。。所以连接的可能性较小。。。

$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。。。或者只是准备好的陈述。。。

最新更新