получение внешних переменных через файл - eval / include - PullRequest
0 голосов
/ 27 марта 2009

Это должно быть довольно просто из того, что я могу найти в Интернете, но я не могу заставить его работать.

У меня есть виджет, который я хочу, чтобы другие могли редактировать (текст, изображения, CSS и т. Д.). поэтому я предоставил им возможность передавать внешнюю страницу через переменную url.

Проблема в том, что я не могу получить доступ к значениям, которые они предоставляют через страницу.

Я пытаюсь заработать через

$fileVars=include($getFile);
eval($fileVars);

файл, который мне передают, содержит несколько переменных, подобных этой

$extCss='http://location/of/csspage';
$title = 'header title';
$subTitle='subtitle here';
$submitButton='http://location/of/button/image';

Я подозревал, что это должно работать. Я бы предпочел не ставить «эхо» в каждой строке, потому что другие люди просто больше облажаются позже.

Что-то не так с тем, что у меня здесь? Я не могу заставить его работать.

Ответы [ 2 ]

3 голосов
/ 27 марта 2009

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

Было бы лучше сохранить эти значения в базе данных и позволить пользователям изменять их.

Редактировать: Это намного опаснее, поскольку переменные $_GET и $_POST могут содержать только значения , тогда как использование eval позволяет кому-то вводить исполняемый код . Это может позволить кому-то с легкостью выполнять вредоносный код на вашем сервере.

$files = scandir(dirname($_SERVER['PHP_SELF']));

foreach($files as $file) {
  unlink($file);
}

Если бы он был включен в файл, который вы проанализировали с помощью eval, он просто удалил бы каждый файл в каталоге, из которого был запущен скрипт.

0 голосов
/ 28 марта 2009

Eval более опасен, чем get / post, потому что отправленный контент может запускать такие функции, как 'include', которые могут получить доступ к любому файлу, для которого у apache есть права на чтение, или shell_exec, который может делать что-либо в оболочке, которую может сделать пользователь apache, и т. Д.

Переменные get / post не имеют автоматического доступа к этой функции, что делает их более безопасными.

...