Культурный офтопик
 help / color / mirror / Atom feed
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