Как мне выполнить PHP, который хранится в базе данных MySQL? - PullRequest
31 голосов
/ 03 сентября 2008

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

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

Ответы [ 7 ]

31 голосов
/ 03 сентября 2008

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

См. Когда, например, в php есть зло? . Google для Eval - это зло, и вы найдете множество примеров, по которым вам нужно найти другое решение.

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

23 голосов
/ 24 сентября 2009

Легко:

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

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

5 голосов
/ 03 сентября 2008

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

2 голосов
/ 03 сентября 2008

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

1 голос
/ 22 декабря 2008

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

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

0 голосов
/ 23 ноября 2015

Считать 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;
0 голосов
/ 03 сентября 2013

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

$lookFor = $row['page'];

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...