PHP eval — оценить код, который содержит переменные

Я создаю модульную CMS, в которой администратор также может создавать собственные модули (наряду с предопределенными). Пользовательские модули принимают код PHP, который будет оцениваться при отображении модуля. Только администратор (один или несколько) может редактировать этот код, и только на странице администратора. * Затем сценарий модуля сохраняется в базе данных.

Скажем, например, что пользовательский модуль написан таким образом, что он запрашивает некоторую информацию из базы данных — более старое сообщение для руководства, если хотите — в переменную, которая, конечно, теперь представляет собой данные, предоставленные пользователем. Возможно ли, что эти данные будут каким-то образом выполнены, если они содержат вредоносный код php? Или eval обрабатывает переменные так же, как и с нативным PHP-кодом?

Я включаю пример, что администратор закодировал список всех сообщений, отправленных пользователем.

PHP-код должен быть eval ()

$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')Это будет выполнено или поддержано?


* Я знаю, что код может быть отредактирован «кем угодно», если база данных взломана или если код явно позволяет пользователям перезаписывать ее содержимое, но это, конечно, настоятельно не рекомендуется. Я оставил несколько предупреждений для них.

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'];
}

Theres возможная атака инъекции SQL в $getsomeкак добавление 'or 1=1' в конце или другие типы …

так что вам нужно использовать PDO или же mysql_real_escape_string при передаче значений … или просто подготовленные заявления …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]