From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Sergey Stepanov To: smoke-room@lists.altlinux.org Mime-Version: 1.0 X-Mailer: mPOP Web-Mail 2.19 X-Originating-IP: unknown via proxy [66.36.240.43] Date: Fri, 03 Mar 2006 22:10:21 +0300 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit Message-Id: Subject: [room] =?koi8-r?b?8NLFxNfB0snUxczYzsHRIMbJzNjU0sHDydEgUEhQIMvP?= =?koi8-r?b?xMEgLSDLwcsg0sHa0sXbydTYINTPzNjLzyDBzMfP0snUzcnexdPL?= =?koi8-r?b?ycUgy8/Nwc7E2T8=?= X-BeenThere: smoke-room@lists.altlinux.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: Sergey Stepanov , =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Id: =?koi8-r?b?y9XM2NTV0s7ZyiDPxtTP0MnL?= List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Mar 2006 19:10:36 -0000 Archived-At: List-Archive: Здравствуйте. Вот решил запостить вопрос и сюда, вследствии собирания здесь большого количества пытливых умов. :) Вопрос, не совсем обычный... Можно ли (и если можно, то каким образом) сделать так, чтобы на сайте, который крутится на PHP, существовал раздел, который бы позволял любому пользователю добавлять PHP-код и сразу _выполнять_ его. Причем от языка PHP нужно разрешить только "алгоритмическую" часть, то есть разрешить в коде использовать только - работу с переменными - работу с массивами - функции, определенные в текущем коде - вывод print или echo - (опционально) математические функции Возможные проблеммы зацикливания чужого кода, проблеммы потенциального создания больших массивов, можно пока не рассматривать. Так вот сам вопрос - можно ли такую вещь как-нибудь сделать? Как ввести нужные ограничения? Конечно, понятно, что такой раздел на сайте - огромнейшая дыра и потенциальная угроза, причем ещо какая. Но вот может быть всеже есть возможность сделать такую вещь без сильного нарушения безопасности? Из возможных путей я пока вижу несколько - - Предварительно фильтровать PHP код на наличие недопустимых функций, и не позволять его запускать. Список недопустимых функций будет весьма большой, и будет зависеть от подключенных модулей... Так что все учесть сложно... - Проанализировать код на наличие описания функций (Это более-менее просто сделать строковыми средствами PHP). Просканировать код и определить все места вызова функций (кстати, как правильно это сделать?). Если вызывается неописанная функция, не разрешать код к запуску... - Комплексный подход средствами UNIX и PHP. Выделить директорию, выход из которой для php скриптов невозможен (это вообще реально сделать?). Назначить права для предотвращения записи внутри директории с такими скриптами. Это ограничит файловые функции скриптов пользователей. Обрезать опции по самые яйца в php.ini (а что там можно реально обрезать в php.ini?). (Дополнительные условия - все должно работать на обычном UNIX хостинге, без экзотических конфигураций.. То есть, иметь два транслятора php или два файла php.ini - для обыной части сайта и для "защищенной" - ни один админ не будет с этим ковыряться.) У кого есть какие соображения по этому поводу? В каком направлении копать? Со всяческими пожеланиями, Сергей. http://xi.net.ru