xintrea
Новичок
Предварительная фильтрация PHP кода - как разрешить только алгоритмические команды?
Здравствуйте.
Вот у меня тут есть такой вопрос, не совсем обычный...
Можно ли (и если можно, то каким образом) сделать так, чтобы на сайте с языком PHP
существовал раздел, который бы позволял любому пользователю добавлять PHP-код
и сразу _выполнять_ его. Причем от языка PHP нужно разрешить только "алгоритмическую"
часть, то есть разрешить в коде использовать только
- работу с переменными
- работу с массивами
- функции, определенные в текущем коде
- вывод print или echo
- (опционально) математические функции
Возможные проблеммы зацикливания чужого кода, проблеммы потенциально возможных
больших массивов можно пока не рассматривать.
Так вот сам вопрос - можно ли такую вещь как-нибудь сделать?
Конечно, понятно, что такой раздел на сайте - огромнейшая дыра и потенциальная угроза,
причем ещо какая. Но вот может быть всеже есть возможность сделать такую вещь
без сильного нарушения безопасности?
Из возможных путей я пока вижу несколько -
- Предварительно фильтровать PHP код на наличие недопустимых функций
и не позволять его запускать. Список недопустимых функций будет весьма большой,
и будет зависеть от подключенных модулей... Так что все учесть сложно...
- Проанализировать код на наличие описания функций (Это более-менее просто).
Просканировать код и определить все места вызова функций (кстати, как правильно
это сделать?). Если вызывается неописанная функция, не разрешать код к запуску...
- Комплексный подход средствами UNIX и PHP. Выделить директорию, выход из которой
для php скриптов невозможен (это вообще реально сделать?). Назначить права для
предотвращения записи внутри директории с такими скриптами. Это ограничит файловые
функции скриптов пользователей. Обрезать опции по самые яйца в php.ini (а что там можно
реально обрезать?).
(Дополнительные условия - все должно работать на обычном UNIX хостинге без
экзотических конфигураций.. То есть, иметь два транслятора php или два файла
php.ini -для обычной части сайта и для "защищенной" - ни один админ не будет с
этим ковыряться.)
У кого есть какие соображения по этому поводу? В каком направлении копать?
Здравствуйте.
Вот у меня тут есть такой вопрос, не совсем обычный...
Можно ли (и если можно, то каким образом) сделать так, чтобы на сайте с языком PHP
существовал раздел, который бы позволял любому пользователю добавлять PHP-код
и сразу _выполнять_ его. Причем от языка PHP нужно разрешить только "алгоритмическую"
часть, то есть разрешить в коде использовать только
- работу с переменными
- работу с массивами
- функции, определенные в текущем коде
- вывод print или echo
- (опционально) математические функции
Возможные проблеммы зацикливания чужого кода, проблеммы потенциально возможных
больших массивов можно пока не рассматривать.
Так вот сам вопрос - можно ли такую вещь как-нибудь сделать?
Конечно, понятно, что такой раздел на сайте - огромнейшая дыра и потенциальная угроза,
причем ещо какая. Но вот может быть всеже есть возможность сделать такую вещь
без сильного нарушения безопасности?
Из возможных путей я пока вижу несколько -
- Предварительно фильтровать PHP код на наличие недопустимых функций
и не позволять его запускать. Список недопустимых функций будет весьма большой,
и будет зависеть от подключенных модулей... Так что все учесть сложно...
- Проанализировать код на наличие описания функций (Это более-менее просто).
Просканировать код и определить все места вызова функций (кстати, как правильно
это сделать?). Если вызывается неописанная функция, не разрешать код к запуску...
- Комплексный подход средствами UNIX и PHP. Выделить директорию, выход из которой
для php скриптов невозможен (это вообще реально сделать?). Назначить права для
предотвращения записи внутри директории с такими скриптами. Это ограничит файловые
функции скриптов пользователей. Обрезать опции по самые яйца в php.ini (а что там можно
реально обрезать?).
(Дополнительные условия - все должно работать на обычном UNIX хостинге без
экзотических конфигураций.. То есть, иметь два транслятора php или два файла
php.ini -для обычной части сайта и для "защищенной" - ни один админ не будет с
этим ковыряться.)
У кого есть какие соображения по этому поводу? В каком направлении копать?
