Аргерих Л. О языке РНР. Часть 5. Страница 71


Есть два типа атак, опасность которых возникает при установке РНР как двоичного модуля CGI:

♦ Доступ к системным файлам

♦ Доступ к защищенным документам веб-сайта

Доступ к системным файлам можно получить путем запроса страницы http:/ /http://www.mydomain.com/cgi-bin/php2/etc/passwdS"> www.mydomain.com/cgi-bin/php2/etc/passwdS > результате РНР проанали­зирует и выведет содержимое файла /etc/passwd, чего явно делать нельзя. Дело в том, что веб-сервер передает / etc/passwd PHP в качестве первого аргу­мента, заставляя РНР предположить, что /etc/passwd - сценарий, который должен быть выполнен. Конечно, в /etc/passwd нет кода РНР, поэтому он прямо выводится в броузер атакующего.

Доступ к защищенным документам можно получить, запросив URL http://www.mydomain.com/cgi-bin/php/some/protected/file.html"> www.mydomain.com/cgi-bin/php/some/protected/file.html. Этот запрос обходит механизмы защиты веб-сервера и выводит содержимое .com/some/protected/file.htr Это происходит потому, что РНР не запраши­вает файл у веб-сервера, а непосредственно открывает его в файловой системе.

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

Опция конфигурации -enable-force-cgi-redirect только с Apache, и

ее работа с другими серверами не гарантируется. Она основана на установке Apache нестандартной переменной CGI REDIRECT_STATUS. При работе с сервером, отличным от Apache, узнайте у его производителя, работает ли эта опция.

Еще один способ сделать установку более безопасной состоит в том, чтобы поместить анализатор РНР вне корневого веб-каталога. Хорошим местом для него будет Недостаток в том, что придется помещать

в начало файлов строку:

#!/path/to/php

Благодаря этой строке веб-сервер будет знать, где найти анализатор РНР. Кроме того, потребуется сделать файлы сценариев исполняемыми. Чтобы заставить РНР правильно работать с переменными PATH_INF0 и PATH_TRANSLA- TED, задайте при компиляции опцию -enable-discard-path.

Настройка РНР

В файле содержатся различные параметры, с помощью которых

можно повысить защищенность РНР, ограничив его возможности доступа. Ниже описаны те параметры, которые, скорее всего, будут использованы с этой целью.

display_errors