From: Sergey Stepanov <dlagovna@mail.ru> To: smoke-room@lists.altlinux.org Subject: [room] Предварительная фильтрация PHP кода - как разрешить только алгоритмические команды? Date: Fri, 03 Mar 2006 22:10:21 +0300 Message-ID: <E1FFFfR-000Epo-00.dlagovna-mail-ru@f53.mail.ru> (raw) Здравствуйте. Вот решил запостить вопрос и сюда, вследствии собирания здесь большого количества пытливых умов. :) Вопрос, не совсем обычный... Можно ли (и если можно, то каким образом) сделать так, чтобы на сайте, который крутится на PHP, существовал раздел, который бы позволял любому пользователю добавлять PHP-код и сразу _выполнять_ его. Причем от языка PHP нужно разрешить только "алгоритмическую" часть, то есть разрешить в коде использовать только - работу с переменными - работу с массивами - функции, определенные в текущем коде - вывод print или echo - (опционально) математические функции Возможные проблеммы зацикливания чужого кода, проблеммы потенциального создания больших массивов, можно пока не рассматривать. Так вот сам вопрос - можно ли такую вещь как-нибудь сделать? Как ввести нужные ограничения? Конечно, понятно, что такой раздел на сайте - огромнейшая дыра и потенциальная угроза, причем ещо какая. Но вот может быть всеже есть возможность сделать такую вещь без сильного нарушения безопасности? Из возможных путей я пока вижу несколько - - Предварительно фильтровать PHP код на наличие недопустимых функций, и не позволять его запускать. Список недопустимых функций будет весьма большой, и будет зависеть от подключенных модулей... Так что все учесть сложно... - Проанализировать код на наличие описания функций (Это более-менее просто сделать строковыми средствами PHP). Просканировать код и определить все места вызова функций (кстати, как правильно это сделать?). Если вызывается неописанная функция, не разрешать код к запуску... - Комплексный подход средствами UNIX и PHP. Выделить директорию, выход из которой для php скриптов невозможен (это вообще реально сделать?). Назначить права для предотвращения записи внутри директории с такими скриптами. Это ограничит файловые функции скриптов пользователей. Обрезать опции по самые яйца в php.ini (а что там можно реально обрезать в php.ini?). (Дополнительные условия - все должно работать на обычном UNIX хостинге, без экзотических конфигураций.. То есть, иметь два транслятора php или два файла php.ini - для обыной части сайта и для "защищенной" - ни один админ не будет с этим ковыряться.) У кого есть какие соображения по этому поводу? В каком направлении копать? Со всяческими пожеланиями, Сергей. http://xi.net.ru
reply other threads:[~2006-03-03 19:10 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=E1FFFfR-000Epo-00.dlagovna-mail-ru@f53.mail.ru \ --to=dlagovna@mail.ru \ --cc=smoke-room@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Культурный офтопик This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/smoke-room/0 smoke-room/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 smoke-room smoke-room/ http://lore.altlinux.org/smoke-room \ smoke-room@lists.altlinux.org smoke-room@lists.altlinux.ru smoke-room@lists.altlinux.com smoke-room@altlinux.ru smoke-room@altlinux.org smoke-room@altlinux.com public-inbox-index smoke-room Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.smoke-room AGPL code for this site: git clone https://public-inbox.org/public-inbox.git