получение внешних переменных через файл – eval/include

StackOverflow https://stackoverflow.com/questions/691239

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

Я пытаюсь оценить через

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Eval более опасен, чем get/post, потому что отправленный контент может запускать такие функции, как «include», которые могут получить доступ к любому файлу, для которого у Apache есть права чтения, или Shell_exec, который может делать в оболочке все, что может делать пользователь Apache, и т. д.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top