我正在建立一个基于模块的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;如果数据库被泄露,或者代码明确允许用户覆盖其内容,但当然强烈反对。我已经为这些留下了几个警告。
答案 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'
...
所以你需要在传递值时使用PDO
或mysql_real_escape_string
......或者只是准备好的语句......