Руководство по PHP
Пред. |  | След.

# Глава 24. Если PHP установлен как CGI

# Возможные атаки

Использование PHP как бинарного CGI-приложения является одним из вариантов, когда по каким-либо причинам нежелательно интегрировать PHP в веб-сервер (например Apache) в качестве модуля, либо предполагается использование таких утилит, как chroot и setuid для организации безопасного окружения во время работы скриптов. Такая установка обычно сопровождается копированием исполняемого файла PHP в директорию cgi-bin веб-сервера. CERT (организация, следящая за угрозами безопасности) CA-96.11 рекомендует не помещать какие-либо интерпретаторы в каталог cgi-bin. Даже если PHP используется как самостоятельный интерпрктатор, он спроектирован так, чтобы предотвратить возможность следующих атак:

- Доступ к системным файлам: `http://my.host/cgi-bin/php?/etc/passwd`

  Данные, введенные в строке запроса (URL) после вопросительного знака, передаются интерпретатору как аргументы командной строки согласно CGI протоколу. Обычно интерпретаторы открывают и исполняют файл, указанный в качестве первого аргумента.

  В случае использования PHP посредством CGI-протокола он не станет интерпретировать аргументы командной строки.

- Доступ к произвольному документу на сервере: `http://my.host/cgi-bin/php/secret/doc.html`

  Согласно общепринятому соглашению часть пути в запрошенной странице, которая расположена после имени выполняемого модуля PHP, `/secret/doc.html`, используется для указания файла, который будет интерпретирован как CGI-программа Обычно, некоторые конфигурационные опции веб-серевера (например, Action для сервера Apache) используются для перенаправления документа, к примеру, для перенаправления запросов вида `http://my.host/secret/script.php` интерпретатору PHP. В таком случае веб-сервер вначале проверяет права доступа к директории `/secret`, и после этого создает перенаправленный запрос `http://my.host/cgi-bin/php/secret/script.php`. К сожалению, если запрос изначально задан в полном виде, проверка на наличие прав для файла `/secret/script.php` не выполняется, она происходит только для файла `/cgi-bin/php`. Таким образом, пользователь имеет возможность обратиться к `/cgi-bin/php`, и, как следствие, к любому защищенному документу на сервере.

  В PHP, указывая во время компиляции опцию --enable-force-cgi-redirect, а таке опции doc_root и user_dir во время выполнения скрипта, можно предотвратить подобные атаки для директорий с ограниченным доступом. Более детально приведенные опции, а также их комбинации будут рассмотрены ниже.

Пред. | Начало | След.
Общие рассуждения | Уровень выше | Вариант 1: обслуживаются только общедоступные файлы