Установка 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:
Доступ к системным файлам через запрос вида: http://my.host/cgi-bin/php?/etc/passwd.
Информация в query-компоненте, который URL-адрес запроса содержит
после вопросительного знака (?), передаётся
интерпретатору через CGI-интерфейс как аргументы командной строки.
Стандартное поведение интерпретатора — открыть и исполнить в командной строке файл,
который указали как первый аргумент запроса.
В режиме CGI-обработчика php не станет интерпретировать аргументы командной строки.
Доступ к произвольному документу на сервере: http://my.host/cgi-bin/php/secret/doc.html.
Информация в path-части URL-адреса наподобие /secret/doc.html,
которая идёт после названия двоичного файла PHP, указывает название файла,
который CGI-программа откроет и интерпретирует.
Отдельные директивы конфигурации наподобие директивы 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 учитывает при выполнении кода. Подробнее опции и их комбинации рассматривают следующие главы раздела.