Защищать сервер Apache от ненадежного PHP-кода?

718
Alex R

У меня необычная ситуация, когда мне нужно, чтобы несколько пользователей могли загружать и выполнять код PHP на моем сервере Apache, но я не могу позволить одному пользователю получить доступ к исходному тексту PHP другого пользователя (если конкретные примеры помогут вам чувствовать себя лучше, представьте, что я хостинг конкурс программирования PHP).

Вот что у меня есть в PHP.ini:

disable_functions = readfile, fpassthru, file, file_get_contents,  система, fopen, символическая ссылка, переименование, копирование, exec, passthru, pcntl_exec,  backtick_operator, shell_exec, popen, proc_open 

Какие еще функции мне нужно добавить в этот список, чтобы предотвратить доступ кода PHP к локальным файлам (и, следовательно, к другому источнику PHP?)?

4

3 ответа на вопрос

1
Bergman

Пожалуйста, взгляните также на http://www.suphp.org/, где исполняются сценарии PHP с правами пользователя, а не пользователь, от которого работает веб-сервер. Если вы убедитесь, что веб-сервер может читать каталог (но не обязательно сам файл PHP), он сможет выполнять эти файлы с разрешениями пользователя. Другие пользователи не должны иметь возможность читать или получать к ним доступ в этом случае. Это должен быть более изящный и безопасный способ справиться с этим.

0
Jon Rhoades

Похоже, вам нужно включить безопасный режим PHP, это отключит все соответствующие функции.

(Обратите внимание, что это было отменено в 5.3 и удалено в PHP6)

Хорошо, я добавил несколько со страницы безопасного режима ... disable_functions = readfile, fpassthru, file, file_get_contents, system, fopen, symlink, переименовать, копировать, exec, passthru, pcntl _exec, backtick_operator, shell_exec, popen, proc_open, chmod, chown, chgrp, touch, dl, highlight_file, show_source, parse_in i_file, mkdir, rmdir, posix_mkfifo, dbase_open, dbmopen, filepro, pg_lo_import, move_uploaded_file, ссылка Alex R 14 лет назад 0
0
James Polley

Вместо того, чтобы пытаться справиться с этим в PHP, я бы повысил уровень или два и использовал бы учетные записи Apache + unix для разделения вещей - например, с помощью suexec, чтобы разделить процессы пользователя.

Похожие вопросы