





Вы можете посмотреть на функцию оценка в PHP. Он позволяет запускать произвольный PHP-код. Однако это может быть огромным риском для безопасности, и его лучше избегать.
Для этого вы можете использовать команду оценка. Я бы не рекомендовал этого делать, потому что при таком подходе есть много подводных камней. Отладка сложна (э-э), она подразумевает некоторые риски безопасности (выполняется плохой контент в БД, о-о).
См., Например, Когда eval Evil в php?. Google for Eval - это зло, и вы найдете множество примеров, почему вам следует найти другое решение.
Дополнение: еще одна хорошая статья с некоторыми ссылками на эксплойты - этот пост в блоге. Относится к прошлым эксплойтам vBulletin и phpMyAdmin, которые были вызваны неправильным использованием Eval.
отрывок из «Eval is evil»: «Разрешение любых пользовательских данных входить в вызов eval () требует взлома». - Хорошо, а что, если я использую свой собственный код, хранящийся в БД и использующий, например, для динамического и быстрого создания пользовательских форм?
@Jeffz, тогда тебе лучше быть очень уверенным, что там не окажется плохого кода. Кроме того, почему вы вставляете его в базу данных, а не только в несколько файлов кода?
оба пути хороши, если ты знаешь, что делаешь; [А]. файловая система более безопасна (особенно для новичков в кодировании), [B]. db способ более универсален, если некоторые изменения кода на лету необходимы, так как обновление db проще, чем обновление, настройка (любого) содержимого файла
Функция eval() была рассмотрена в других ответах здесь. Я согласен, что вам следует ограничить использование eval, если в этом нет крайней необходимости. Вместо PHP-кода в db у вас может быть просто имя класса, у которого есть метод, например, execute(). Всякий раз, когда вам нужно запустить свой собственный PHP-код, просто создайте экземпляр класса имени, который вы только что получили из базы данных, и запустите на нем ->execute(). Это гораздо более чистое решение, которое дает вам большую гибкость и значительно повышает безопасность сайта.
Рассматривали ли вы использование своей системы управления версиями для хранения разных вилок для различных установок (и модулей, которые различаются между ними)? Это был бы один из нескольких передовых методов настройки приложения, которые я могу придумать. Ваше требование не является необычным, так что это проблема, которая решалась другими в прошлом; а хранение кода в базе данных - это то, на что, я думаю, вам будет трудно найти ссылки или рекомендации в качестве передовой практики.
Хорошо, что вы разместили разъяснение. Вероятно, вы случайно задали ответ в поисках подходящего вопроса.
Легко:
$x // your variable with the data from the DB
<?php echo eval("?>".$x."<?") ?>
Дайте мне знать, отлично работает для меня во МНОГИХ приложениях, не могу не заметить, что все быстро говорят, насколько это плохо, но медленно помогают с прямым ответом ...
Я исправил вашу уценку - если вы не сделаете отступ в четыре пробела в коде, <?php ?> будет рассматриваться как HTML-тег и станет скрытым
+1 Это решение практически работает. Простое применение eval ($ x) НЕ решает проблему, поскольку нарушает код со знаком «<». Итак, этот ответ решает проблему. Приветствую Gapp!
Как я это сделал, так это иметь поле в базе данных, которое идентифицирует что-то уникальное в блоке кода, который необходимо выполнить. Это одно слово находится в имени файла этого кода. Я складываю строки вместе, чтобы указать на файл php, который нужно включить. пример:
$lookFor = $row['page'];
include("resources/" . $lookFor . "Codebase.php");
Таким образом, даже если хакер может получить доступ к вашей БД, он не сможет поместить туда вредоносный код для выполнения. Он, возможно, мог бы изменить ссылочное слово, но если бы он не мог фактически поместить файл прямо на сервер, это не принесло бы ему никакой пользы. Если бы он мог помещать файлы прямо на сервер, вы все равно проиграли, если он действительно хочет быть противным. Стоит всего два цента.
И да, есть причины, по которым вы захотите выполнить сохраненный код, но есть минусы.
Ваше заявление о том, что этот метод включения безопасен, даже если хакер может получить доступ к вашей БД, неверно. Он по-прежнему уязвим для нескольких эксплойтов, включая один, известный как «отравление нулевого байта» или «инъекция нулевого байта», который может эффективно удалить (игнорировать) конец вашей строки. Подробнее см. здесь и здесь.
Прочтите php-код из базы данных и сохраните в файл с уникальным именем, а затем включите файл это простой способ запустить PHP-код и отладить его.
$uniqid = "tmp/".date("d-m-Y h-i-s").'_'.$Title."_".uniqid().".php";
$file = fopen($uniqid,"w");
fwrite($file,"<?php \r\n ".$R['Body']);
fclose($file);
// eval($R['Body']);
include $uniqid;
Спасибо за этот вопрос. В отличие от многих «ответов» ниже, это хороший и полезный. Есть много вариантов использования LEGIT, в которых вы хотите хранить команды PHP в БД. Сказать «не делай этого», не зная обстоятельств, просто высокомерно.