PHP eval () — надежно фильтрует файловые функции

Название суммирует это довольно хорошо. Что является надежным способом предотвращения выполнения функций, которые взаимодействуют с файлами? Мы говорим о злой eval(),

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

Пример:

Код PHP

eval("file_get_contents('passwords.ini')");

В настоящее время это заменяется перед выполнением:

Код PHP

eval("fn_zero('passwords.ini')");

РЕДАКТИРОВАТЬ

Что касается злой Eval (). То, что я делаю здесь, это выполнение созданного администратором, хранимого в базе данных кода PHP в модульной системе управления контентом. Редактирование кода требует дополнительного уровня аутентификации, который отделен от имени главного администратора, это не совсем ненадежный ввод пользователя.

Администратор может убить его / ее сайт, если это его / ее намерение, это не мое дело. Моя задача — предотвратить просмотр основного кода PHP CMS.

Приложение: каждый сайт имеет свой собственный корень и базу данных. Они не могут навредить друг другу таким образом.

0

Решение

Чтобы ответить на вопрос в том виде, в котором он был задан, «очистка» eval-ввода невозможна. Простой пример:

eval("\$f=strrev('stnetnoc_teg_elif');\$f('passwords.ini');");

Возможные варианты выполнения предоставленного пользователем кода: песочница или пользовательский VM, как https://github.com/ircmaxell/PHPPHP.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]