Установка PHP в виде двоичного файла, который взаимодействует с веб-сервером по протоколу CGI, представляет альтернативу интегрированию PHP в серверное ПО наподобие веб-сервера Apache в виде модуля и альтернативу установкам, которым придётся использовать PHP с набором CGI-обёрток, чтобы сделать окружения для скриптов безопасными в части установки утилитами chroot и setuid корневого каталога и идентификатора пользователя, от имени которого выполнится скрипт. При установке PHP в виде CGI-программы исполняемый двоичный файл php часто устанавливают в каталог веб-сервера cgi-bin. Компьютерная группа реагирования на чрезвычайные ситуации (англ. Computer Emergency Response Team, CERT) подготовила рекомендацию » CA-96.11, в которой не советует располагать интерпретаторы в каталоге cgi-bin. Двоичный файл php спроектировали так, чтобы даже при работе в качестве автономного интерпретатора файл защищал от атак, риск которых появляется при установке PHP в режиме CGI:
?
), передаётся
интерпретатору через CGI-интерфейс как аргументы командной строки.
Стандартное поведение интерпретатора — открыть и исполнить в командной строке файл,
который указали как первый аргумент запроса.
В режиме CGI-обработчика php не станет
интерпретировать аргументы командной строки.
Action
в конфигурации веб-сервера Apache указывают, чтобы перенаправить запрос к документам вида
http://my.host/secret/script.php к интерпретатору PHP.
При такой настройке веб-сервер сначала проверяет права доступа к каталогу
/secret, а затем создаёт и перенаправляет запрос к файлу
http://my.host/cgi-bin/php/secret/script.php.
К сожалению, веб-сервер проверит права доступа только к файлу /cgi-bin/php,
но не проверит права доступа к файлу /secret/script.php,
если запрос в самом начале задали в полной форме. Поэтому пользователи с доступом
к файлу /cgi-bin/php получат доступ к защищённым документам на сервере.
Для предотвращения атак, которые направляют на каталоги с ограничениями доступа,
если такие содержит дерево документов сервера, в PHP пользуются директивами конфигурации
cgi.force_redirect,
doc_root
и user_dir, которые PHP учитывает при выполнении кода.
Подробнее опции и их комбинации рассматривают следующие главы раздела.