Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
опции memory_limit и max_execution_time спасут. 04.03.06 20:26 Число просмотров: 21788
Автор: paganoid Статус: Member
|
> Здравствуйте. > > Вот у меня тут есть такой вопрос, не совсем обычный... > > Можно ли (и если можно, то каким образом) сделать так, > чтобы на сайте с языком PHP > существовал раздел, который бы позволял любому пользователю > добавлять PHP-код > и сразувыполнятьего. Причем от языка PHP нужно > разрешить только "алгоритмическую" > часть, то есть разрешить в коде использовать только > > - работу с переменными > - работу с массивами > - функции, определенные в текущем коде > - вывод print или echo > - (опционально) математические функции > > Возможные проблеммы зацикливания чужого кода, проблеммы > потенциально возможных > больших массивов можно пока не рассматривать.
опции memory_limit и max_execution_time спасут.
> > Так вот сам вопрос - можно ли такую вещь как-нибудь > сделать? > Конечно, понятно, что такой раздел на сайте - огромнейшая > дыра и потенциальная угроза, > причем ещо какая. Но вот может быть всеже есть возможность > сделать такую вещь > без сильного нарушения безопасности? > > Из возможных путей я пока вижу несколько - > > - Предварительно фильтровать PHP код на наличие > недопустимых функций > и не позволять его запускать. Список недопустимых функций > будет весьма большой, > и будет зависеть от подключенных модулей... Так что все > учесть сложно...
Есть какая-то "виртуальная машина" для PHP, посмотри на их сайте. Внутри этой машины
можно попробовать установить ограниченный список модулей, требуемый safe mode.
> > - Проанализировать код на наличие описания функций (Это > более-менее просто). > Просканировать код и определить все места вызова функций > (кстати, как правильно > это сделать?). Если вызывается неописанная функция, не > разрешать код к запуску...
В этом варианте навскидку видится только декомпилятор. В качестве другого более менее приемлемого решения - сделать на код highlight с помощью встроенной PHP функции, т.о. найти фрагменты именно кода, а там уже preg-ом. Кстати все равно preg будет хватать лишнее (названия ф-й внутри переменных и комментариев).
> > - Комплексный подход средствами UNIX и PHP. Выделить > директорию, выход из которой > для php скриптов невозможен (это вообще реально сделать?). > Назначить права для > предотвращения записи внутри директории с такими скриптами. > Это ограничит файловые > функции скриптов пользователей. Обрезать опции по самые > яйца в php.ini (а что там можно > реально обрезать?).
См. php safe mode - в нем можно задать опцию open_base_dir - откуда php может читать файлы. Там же можно обрезать список разрешенных функций. Сам список достаточно просто получить через get_defined_function или что-то вроде там такое есть.
> > (Дополнительные условия - все должно работать на обычном > UNIX хостинге без > экзотических конфигураций.. То есть, иметь два транслятора > php или два файла > php.ini -для обыной части сайта и для "защищенной" - ни > один админ не будет с > этим ковыряться.)
Версия - обычный PHP - в виде модуля, а "песочница" - через интерпретатор, урезанный с помощью php.ini. И выполнять чужие скрипты только через этот через интерпретатор. Кстати, приблизительно так иногда делают для crontab скриптов.
> > У кого есть какие соображения по этому поводу? В каком > направлении копать?
|
|
|