информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медАтака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / web building
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
опции memory_limit и max_execution_time спасут. 04.03.06 20:26  Число просмотров: 21784
Автор: 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 скриптов.

>
> У кого есть какие соображения по этому поводу? В каком
> направлении копать?
<web building>
Предварительная фильтрация PHP кода - как разрешить только алгоритмические команды? 03.03.06 18:08  
Автор: xintrea Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Здравствуйте.

Вот у меня тут есть такой вопрос, не совсем обычный...

Можно ли (и если можно, то каким образом) сделать так, чтобы на сайте с языком PHP
существовал раздел, который бы позволял любому пользователю добавлять PHP-код
и сразувыполнятьего. Причем от языка PHP нужно разрешить только "алгоритмическую"
часть, то есть разрешить в коде использовать только

- работу с переменными
- работу с массивами
- функции, определенные в текущем коде
- вывод print или echo
- (опционально) математические функции

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

Так вот сам вопрос - можно ли такую вещь как-нибудь сделать?
Конечно, понятно, что такой раздел на сайте - огромнейшая дыра и потенциальная угроза,
причем ещо какая. Но вот может быть всеже есть возможность сделать такую вещь
без сильного нарушения безопасности?

Из возможных путей я пока вижу несколько -

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

- Проанализировать код на наличие описания функций (Это более-менее просто).
Просканировать код и определить все места вызова функций (кстати, как правильно
это сделать?). Если вызывается неописанная функция, не разрешать код к запуску...

- Комплексный подход средствами UNIX и PHP. Выделить директорию, выход из которой
для php скриптов невозможен (это вообще реально сделать?). Назначить права для
предотвращения записи внутри директории с такими скриптами. Это ограничит файловые
функции скриптов пользователей. Обрезать опции по самые яйца в php.ini (а что там можно
реально обрезать?).

(Дополнительные условия - все должно работать на обычном UNIX хостинге без
экзотических конфигураций.. То есть, иметь два транслятора php или два файла
php.ini -для обыной части сайта и для "защищенной" - ни один админ не будет с
этим ковыряться.)


У кого есть какие соображения по этому поводу? В каком направлении копать?
опции memory_limit и max_execution_time спасут. 04.03.06 20:26  
Автор: 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 скриптов.

>
> У кого есть какие соображения по этому поводу? В каком
> направлении копать?
Ага, это обязательно. 06.03.06 15:33  
Автор: xintrea Статус: Незарегистрированный пользователь
<"чистая" ссылка>

> опции memory_limit и max_execution_time спасут.

Ага, это обязательно.


> - Проанализировать код на наличие описания функций
> (Это более-менее просто). Просканировать код и определить все места вызова
> функций (кстати, как правильно это сделать?). Если вызывается неописанная функция, не
> разрешать код к запуску...
>
> В этом варианте навскидку видится только декомпилятор. В
> качестве другого более менее приемлемого решения - сделать
> на код highlight с помощью встроенной PHP функции, т.о.
> найти фрагменты именно кода, а там уже preg-ом. Кстати все
> равно preg будет хватать лишнее (названия ф-й внутри
> переменных и комментариев).

Для этого мне посоветовали использовать токенайзер http://www.php.net/tokenizer,
это оказывается встроенный лексический анализатор PHP-кода, доступный
по умолчанию в PHP, начиная с версии 4.3.0


> См. php safe mode - в нем можно задать опцию open_base_dir
> - откуда php может читать файлы. Там же можно обрезать
> список разрешенных функций. Сам список достаточно просто
> получить через get_defined_function или что-то вроде там
> такое есть.

Спасибо, работа пошла.
Круто, век живи, век учись (это я про tokenizer). 06.03.06 18:09  
Автор: paganoid Статус: Member
Отредактировано 06.03.06 18:23  Количество правок: 1
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach