Я создаю модульную 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')
Это будет выполнено или поддержано?
* Я знаю, что код может быть отредактирован «кем угодно», если база данных взломана или если код явно позволяет пользователям перезаписывать ее содержимое, но это, конечно, настоятельно не рекомендуется. Я оставил несколько предупреждений для них.
в этом случае вы просто выбираете и отображаете данные … так что возможности для прикрепления меньше …
$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
при передаче значений … или просто подготовленные заявления …
Других решений пока нет …