Как выполнить PHP, хранящийся в базе данных MySQL?

Я пытаюсь написать страницу, которая вызывает PHP, хранящийся в базе данных MySQL. Страница, которая хранится в базе данных MySQL, содержит код PHP (и HTML), который я хочу запустить при загрузке страницы.

Как я мог это сделать?

Спасибо за этот вопрос. В отличие от многих «ответов» ниже, это хороший и полезный. Есть много вариантов использования LEGIT, в которых вы хотите хранить команды PHP в БД. Сказать «не делай этого», не зная обстоятельств, просто высокомерно.

Rid Iculous 27.03.2013 06:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
33
1
37 035
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вы можете посмотреть на функцию оценка в PHP. Он позволяет запускать произвольный PHP-код. Однако это может быть огромным риском для безопасности, и его лучше избегать.

Ответ принят как подходящий

Для этого вы можете использовать команду оценка. Я бы не рекомендовал этого делать, потому что при таком подходе есть много подводных камней. Отладка сложна (э-э), она подразумевает некоторые риски безопасности (выполняется плохой контент в БД, о-о).

См., Например, Когда eval Evil в php?. Google for Eval - это зло, и вы найдете множество примеров, почему вам следует найти другое решение.

Дополнение: еще одна хорошая статья с некоторыми ссылками на эксплойты - этот пост в блоге. Относится к прошлым эксплойтам vBulletin и phpMyAdmin, которые были вызваны неправильным использованием Eval.

отрывок из «Eval is evil»: «Разрешение любых пользовательских данных входить в вызов eval () требует взлома». - Хорошо, а что, если я использую свой собственный код, хранящийся в БД и использующий, например, для динамического и быстрого создания пользовательских форм?

Jeffz 10.05.2013 18:38

@Jeffz, тогда тебе лучше быть очень уверенным, что там не окажется плохого кода. Кроме того, почему вы вставляете его в базу данных, а не только в несколько файлов кода?

Erik van Brakel 10.05.2013 20:36

оба пути хороши, если ты знаешь, что делаешь; [А]. файловая система более безопасна (особенно для новичков в кодировании), [B]. db способ более универсален, если некоторые изменения кода на лету необходимы, так как обновление db проще, чем обновление, настройка (любого) содержимого файла

Jeffz 07.07.2013 17:18

Функция eval() была рассмотрена в других ответах здесь. Я согласен, что вам следует ограничить использование eval, если в этом нет крайней необходимости. Вместо PHP-кода в db у вас может быть просто имя класса, у которого есть метод, например, execute(). Всякий раз, когда вам нужно запустить свой собственный PHP-код, просто создайте экземпляр класса имени, который вы только что получили из базы данных, и запустите на нем ->execute(). Это гораздо более чистое решение, которое дает вам большую гибкость и значительно повышает безопасность сайта.

Рассматривали ли вы использование своей системы управления версиями для хранения разных вилок для различных установок (и модулей, которые различаются между ними)? Это был бы один из нескольких передовых методов настройки приложения, которые я могу придумать. Ваше требование не является необычным, так что это проблема, которая решалась другими в прошлом; а хранение кода в базе данных - это то, на что, я думаю, вам будет трудно найти ссылки или рекомендации в качестве передовой практики.

Хорошо, что вы разместили разъяснение. Вероятно, вы случайно задали ответ в поисках подходящего вопроса.

Легко:

$x // your variable with the data from the DB
<?php echo eval("?>".$x."<?") ?>

Дайте мне знать, отлично работает для меня во МНОГИХ приложениях, не могу не заметить, что все быстро говорят, насколько это плохо, но медленно помогают с прямым ответом ...

Я исправил вашу уценку - если вы не сделаете отступ в четыре пробела в коде, <?php ?> будет рассматриваться как HTML-тег и станет скрытым

dbr 08.02.2010 05:37

+1 Это решение практически работает. Простое применение eval ($ x) НЕ решает проблему, поскольку нарушает код со знаком «<». Итак, этот ответ решает проблему. Приветствую Gapp!

Devner 14.03.2013 22:21

Как я это сделал, так это иметь поле в базе данных, которое идентифицирует что-то уникальное в блоке кода, который необходимо выполнить. Это одно слово находится в имени файла этого кода. Я складываю строки вместе, чтобы указать на файл php, который нужно включить. пример:

$lookFor = $row['page'];

include("resources/" . $lookFor . "Codebase.php");

Таким образом, даже если хакер может получить доступ к вашей БД, он не сможет поместить туда вредоносный код для выполнения. Он, возможно, мог бы изменить ссылочное слово, но если бы он не мог фактически поместить файл прямо на сервер, это не принесло бы ему никакой пользы. Если бы он мог помещать файлы прямо на сервер, вы все равно проиграли, если он действительно хочет быть противным. Стоит всего два цента.

И да, есть причины, по которым вы захотите выполнить сохраненный код, но есть минусы.

Ваше заявление о том, что этот метод включения безопасен, даже если хакер может получить доступ к вашей БД, неверно. Он по-прежнему уязвим для нескольких эксплойтов, включая один, известный как «отравление нулевого байта» или «инъекция нулевого байта», который может эффективно удалить (игнорировать) конец вашей строки. Подробнее см. здесь и здесь.

Justin Warkentin 01.12.2014 08:29

Прочтите 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;

Другие вопросы по теме