Я пытаюсь написать страницу, которая вызывает PHP, который хранится в базе данных MySQL. Страница, которая хранится в базе данных MySQL, содержит код PHP (и HTML), который я хочу запустить при загрузке страницы.
Как я мог это сделать?
Для этого вы можете использовать команду eval . Я бы рекомендовал против этого, хотя, потому что есть много подводных камней, использующих этот подход. Отладка жесткая (er), она подразумевает некоторые риски безопасности (плохой контент в БД выполняется, о, о).
См. Когда eval evil в php? например. Google для Eval – это зло, и вы найдете много примеров, почему вы должны найти другое решение.
Дополнение: Еще одна хорошая статья с некоторыми ссылками на эксплойты – это blogpost . Относится к прошлым vBulletin и эксплойтам phpMyAdmin, которые были вызваны неправильным использованием Eval.
Легко:
$x // your variable with the data from the DB <?php echo eval("?>".$x."<?") ?>
Дайте мне знать, отлично работает для меня в МНОГИХ приложениях, не может не заметить, что все быстро говорят, насколько это плохо, но медленно, чтобы на самом деле помочь с прямым ответом …
Функция eval()
была рассмотрена в других ответах здесь. Я согласен, что вы должны ограничить использование eval
если это абсолютно необходимо. Вместо того, чтобы иметь PHP-код в db, у вас может быть только имя класса, у которого есть метод, называемый, например, execute()
. Всякий раз, когда вам нужно запустить свой собственный PHP-код, просто создайте класс имени, который вы только что выбрали из db, и запустите ->execute()
. Это намного более чистое решение и дает вам большую гибкость и значительно повышает безопасность сайта.
Вы можете посмотреть на функцию eval в PHP. Он позволяет запускать произвольный PHP-код. Однако это может быть огромный риск для безопасности, и его лучше избегать.
Рассматривали ли вы использование вашей системы управления версиями для хранения различных вилок для различных установок (и модулей, которые отличаются от них)? Это будет одна из нескольких лучших практик для конфигурации приложения, о которой я могу думать. У вас нет необычного требования, так что это проблема, которая была решена другими в прошлом; и сохранение кода в базе данных – это то, о чем я думаю, вам нелегко найти ссылку или посоветоваться как лучшая практика.
Хорошо, что вы опубликовали разъяснения. Вероятно, вы случайно случайно поставили ответ в поисках подходящего вопроса.
Читайте php-код из базы данных и сохраняйте файл с уникальным именем, а затем включите файл таким простым способом для запуска php-кода и отладки его.
$uniqid="tmp/".date("dmY his").'_'.$Title."_".uniqid().".php"; $file = fopen($uniqid,"w"); fwrite($file,"<?php \r\n ".$R['Body']); fclose($file); // eval($R['Body']); include $uniqid;
Как я это сделал, это иметь поле в базе данных, которое идентифицировало что-то уникальное в блоке кода, который необходимо выполнить. Это одно слово находится в имени файла этого кода. Я помещаю строки вместе, чтобы указать на файл php, который будет включен. пример:
$lookFor = $row['page']; include("resources/" . $lookFor . "Codebase.php");
Таким образом, даже если хакер мог получить к вам доступ к БД, он не смог бы установить вредоносный код, который должен быть выполнен. Возможно, он мог бы изменить ссылочное слово, но если бы он не мог разместить файл прямо на сервере, это не принесло бы ему пользы. Если бы он мог помещать файлы прямо на сервер, вы все равно потопнули, если он действительно хочет быть противным. Только мои два цента стоят.
И да, есть причины, по которым вы захотите выполнить сохраненный код, но есть минусы.