Глава 4. Конфигурация
Файл php3.ini читается при запуске синтаксического анализатора PHP. Для версий серверного модуля PHP, это случается только один раз, когда запускается веб-сервер. Для версии CGI это случается на каждом вызове.
Только для каждой директивы указанной здесь, имеется соответствующая директива Apache в httpd.conf. Просто добавьте php3_ в начале имен директив, указанных здесь.
Вы можете посмотреть установочные параметры большинства значений конфигурации вызвав функцию phpinfo().
- auto_append_file string
Определяет имя файла, который автоматически проверяется после основного файла. Файл включается так же, как если бы была вызвана функция include(), с использованием include_path.
Специальное значение none запрещает авто-добавление.
Примечание: Если сценарий обрывается функцией exit(),
авто-добавление не произойдет.
- auto_prepend_filestring
Определяет имя файла, который автоматически проверяется перед основным файлом. Файл включается так же, как если бы была вызвана функция include(), с использованием include_path.
Специальное значение none запрещает авто-добавление.
- cgi_ext
string
- display_errors
boolean
Это определяет, должны ли ошибки печататься на экране как часть HTML вывода или нет.
- doc_root
string
Главный каталог("root directory") PHP на сервере. Используется только когда он не пустой. Если PHP сконфигурирован при помощи safe mode, то никакие другие файлы за пределами этого каталога не обслуживаются.
- engine
boolean
Эта директива действительно полезна только в модуле PHP под Apache. Это используется на сайтах, где необходимо включать и выключать синтаксический анализ PHP на определенные каталоги и виртуальные серверы. Установкой php3_engine off в допустимом месте файла httpd.conf, PHP можно запрещать и разрешать.
- error_log
string
Имя файла, куда сохраняется журнал ошибок(log file) сценариев. Если используется специальное значение syslog, ошибки отправляются в системный журнал(system logger).
В UNIX'е это syslog(3), а в Windows NT это журнал событий (event log). Системный журнал не поддерживается в Windows 95.
- error_reporting
integer
Устанавливает уровень сообщений об ошибках. Параметр является целым, представляющим битовую область. Добавьте те значения уровней сообщений об ошибках, которые Вы хотите.
Таблица 4-1. Уровни сообщений об ошибках
bit value | допустимые сообщения |
1 |
нормальные ошибки |
2 |
нормальные предупреждения |
4 |
ошибки синтаксического анализатора |
8 |
некритичные предупреждения стиля |
Значение по умолчанию - 7 (показываются нормальные ошибки, нормальные предупреждения и синтаксические ошибки).
-
open_basedir
string
-
Ограничивает файлы, которые могут открываться PHP в определенном директории-дереве.
Когда сценарий пытается открыть файл с помощью, например, fopen или gzopen, наличие/расположение файла проверяется. Когда файл находится за пределами определенного директория-дерева, PHP откажется открыть его. Все символьные ссылки определены, так что нет возможности избежать этого ограничения с помощью symlink.
Специальное значение . показывает что каталог, в котором находится сценарий, используется как основной каталог.
По умолчанию допускается открытие всех файлов.
-
gpc_order
string
-
Устанавливает допустимость GET/POST/COOKIE в анализе. Установка по умолчанию этой директивы - "GPC". Установка ее в "GP", например, вынудит PHP полностью игнорировать cookies и перезапишет любые переменные метода GET переменными метода POST с одинаковыми именами.
-
include_path
string
-
Определяет список каталогов где будут располагаться файлы для функций
require()
,
include()
и
fopen_with_path()
. Формат подобен формату системной переменной окружения
PATH
: список каталогов разделяется двоеточием в UNIX или точкой с запятой в Windows.
Пример 4-1. UNIX include_path
include_path=.:/home/httpd/php-lib
|
Пример 4-2. Windows include_path
include_path=".;c:\www\phplib"
|
Значением по умолчанию этой директивы является
.
(только текущий каталог).
-
isapi_ext
string
-
-
log_errors
boolean
-
Сообщает, что независимые сообщения об ошибке сценария должны регистрироваться в журнале ошибок сервера. Этот выбор таким образом является специфичным для сервера.
-
magic_quotes_gpc
boolean
-
Устанавливает magic_quotes состояние для GPC (Get/Post/Cookie)
операций. Когда magic_quotes включено (on), все ' (одиночные кавычки),
" (двойные кавычки), \ (обратные слэши) и нулевые значения (NUL's) записываются с обратной косой чертой автоматически. Если также включено magic_quotes_sybase, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты.
-
magic_quotes_runtime
boolean
-
Если
magic_quotes_runtime
разрешено, большинство функций, которые возвращают данные из любого внешнего источника разной природы, включая базы данных и текстовые файлы, будут иметь кавычки, записанные с обратной косой чертой.
Если
magic_quotes_sybase
также включены, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты.
-
magic_quotes_sybase
boolean
-
Если
magic_quotes_sybase
также разрешено, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты, если
magic_quotes_gpc
или magic_quotes_runtime
разрешены.
-
max_execution_time
integer
-
Эта установка определяет максимальное время в секундах допустимое для сценария, прежде чем он будет прекращен анализатором. Это помогает предохраниться от плохо/некорректно написанных сценариев.
-
memory_limit
integer
-
Эта установка определяет максимальный размер памяти в байтах, допустимый для этого сценария. Это помогает запретить плохо/некорректно написанным сценариям использовать всю доступную память на сервере.
-
nsapi_ext
string
-
-
short_open_tag
boolean
-
Задает допустимость короткой формы (
<? ?>
тегов PHP . Если вы хотите использовать PHP совместно с XML, эту опцию необходимо отключить. Если опция отключена, вы должны использовать длинную форму тегов
(
<?php ?>
).
-
sql.safe_mode
boolean
-
-
track_errors
boolean
-
Если опция разрешена, последнее сообщение об ошибке всегда будет представлена в глобальной переменной
$php_errormsg.
-
track_vars
boolean
-
Если опция разрешена, входящая информация GET, POST и cookie может быть найдена в
глобальных ассоциативных массивах
$HTTP_GET_VARS
,
$HTTP_POST_VARS
и
$HTTP_COOKIE_VARS
, соответственно.
-
upload_tmp_dir
string
-
Временный каталог, используемый для хранения файлов при их загрузке на сервер. Должен допускать запись, независимо от того, каким пользователем PHP используется.
-
user_dir
string
-
Основное имя каталога, используемого в домашнем каталоге пользователей для файлов PHP, например
public_html
.
-
warn_plus_overloading
boolean
-
Если разрешено, эта опция выдает при выводе PHP сообщение когда оператор плюс(
+
) используется в строке. Это должно облегчить поиск сценариев, которые должны быть перезаписаны с заменой на
(
.
) - string concatenator.
-
SMTP
string
-
Имя DNS или IP адрес сервера SMTP, который должен использоваться PHP под Windows
для отправки сообщения функцией
mail()
.
-
sendmail_from
string
-
Определяет "From:" - почтовый адрес, который используется в сообщении, отправленном
PHP под Windows.
-
sendmail_path
string
-
Указывает где может быть найдена программа
sendmail
,
обычно это
/usr/sbin/sendmail
или
/usr/lib/sendmail
configure
делает честную попытку определить это за вас и устанавливает значение по умолчанию, но в случае неудачи вы можете установить это здесь.
Системы не использующие sendmail должны установить
оболочку/замену sendmail их предлагаемой системой почты, если имеется.
Например,
Qmail
пользователи могут указать
/var/qmail/bin/sendmail
.
-
safe_mode
boolean
-
Устанавливает допустимость PHP safe mode. Читайте
главу Безопасность (Security)
для большей информации
-
safe_mode_exec_dir
string
-
Если PHP используется в safe mode,
system()
и другие функции, выполняющие системные программы, отказываются запускать программы, которые находятся не в этом каталоге.
-
debugger.host
string
-
DNS-имя или IP-адрес хоста используемого отладчиком.
-
debugger.port
string
-
Номер порта используемого отладчиком.
-
debugger.enabled
boolean
-
Задает допустимость использования отладчика.
-
enable_dl
boolean
-
Эта директива действительно полезна только в модуле PHP под Apache. Вы можете разрешать/запрещать динамическую загрузку расширений PHP функцией
dl()
раздельно по каталогам и/или по виртуальным серверам.
Основная причина для выключения динамической загрузки - безопасность. С динамической загрузкой, можно игнорировать все ограничения safe_mode и open_basedir.
По умолчанию динамическая загрузка должна допускаться, за исключением случаев, когда используется
safe-mode. В safe-mode всегда недопустимо использование
dl()
.
-
extension_dir
string
-
В каком каталоге PHP должен искать динамически загружаемые расширения.
-
extension
string
-
Какие динамически загружаемые расширения загрузить, при запуске PHP.
-
mysql.allow_persistent
boolean
-
Допустить постоянные/устойчивые MySQL соединения.
-
mysql.max_persistent
integer
-
Максимальное число постоянных MySQL соединений за один процесс.
-
mysql.max_links
integer
-
Максимальное число MySQL соединений за процесс, включая постоянные соединения.
-
msql.allow_persistent
boolean
-
Допустить постоянные mSQL соединения.
-
msql.max_persistent
integer
-
The maximum number of persistent mSQL connections per process.
-
msql.max_links
integer
-
Максимальное число постоянных mSQL соединений за один процесс.
-
pgsql.allow_persistent
boolean
-
Допустить постоянные/устойчивые соединения Postgres.
-
pgsql.max_persistent
integer
-
Максимальное число постоянных соединений Postgres за процесс.
-
pgsql.max_links
integer
-
Максимальное число Postgres соединений за процесс, включая постоянные соединения.
-
sybase.allow_persistent
boolean
-
Допустить постоянные Sybase соединения.
-
sybase.max_persistent
integer
-
Максимальное число постоянных Sybase соединений за процесс.
-
sybase.max_links
integer
-
Максимальное число Sybase соединений за процесс, включая постоянные соединения.
-
sybct.allow_persistent
boolean
-
Допустить постоянные Sybase-CT соединения.
По умолчанию включено.
-
sybct.max_persistent
integer
-
Максимальное число постоянных Sybase-CT соединений за процесс. По умолчанию значение -1 означающее неограниченное количество.
-
sybct.max_links
integer
-
Максимальное число Sybase-CT соединений за процесс, включая постоянные соединения. По умолчанию значение -1 означающее неограниченное количество.
-
sybct.min_server_severity
integer
-
Сообщения Сервера со степенью более чем или равной sybct.min_server_severity будут сообщены как предупреждения. Эта величина может также устанавливаться из сценария вызовом
sybase_min_server_severity()
. Значение по умолчанию - 10 , которое сообщает ошибки строгости информации, или выше.
-
sybct.min_client_severity
integer
-
Сообщения библиотеки Клиента со строгостью более чем или равной sybct.min_client_severity будут сообщены как предупреждениях. Эта величина может также устанавливаться из сценария вызовом
sybase_min_client_severity()
. По умолчанию - 10, что эффективно запрещает вывод.
-
sybct.login_timeout
integer
-
Максимальное время (в секундах) ожидания повторной попытки соединения, прежде чем будет отказ. Имейте в виду, что если max_execution_time превышен когда время попытки соединения закончится, ваш сценарий будет расторгнут прежде, чем будут предприняты какие-либо действия на случай отказа. По умолчанию - одна минута.
-
sybct.timeout
integer
-
Максимальное время(в секундах)ожидания окончания select_db или выполнения запроса. Имейте в виду, что если max_execution_time превышен, когда время функционирования истекает, ваш сценарий будет расторгнут прежде, чем будут предприняты какие-либо действия на случай отказа. По умолчанию не ограничено.
-
sybct.hostname
string
-
Имя хоста, с которым вы хотите соединиться, для показа sp_who. По умолчанию - none.
-
bcmath.scale
integer
-
Количество десятичных цифр для всех функций bcmath.
-
browscap
string
-
имя файла возможностей браузера.
-
uodbc.default_db
string
-
ИСТОЧНИК ДАННЫХ ODBC, для использования, если ничего не определено в
odbc_connect()
или
odbc_pconnect()
.
-
uodbc.default_user
string
-
Имя пользователя, используемое если нет определений в
odbc_connect()
или
odbc_pconnect()
.
-
uodbc.default_pw
string
-
Пароль, используемый, если не определено в
odbc_connect()
или
odbc_pconnect()
.
-
uodbc.allow_persistent
boolean
-
Допустить постоянные/устойчивые ODBC соединения.
-
uodbc.max_persistent
integer
-
Максимальное число постоянных ODBC соединений за процесс.
-
uodbc.max_links
integer
-
Максимальное число ODBC соединений за процесс, включая постоянные соединения.
PHP - мощный язык и интерпретатор, независимо от того, включен ли он в веб-сервер как модуль или выполняется как разделение исполнимых файлов(binary) CGI, он может иметь доступ к файлам, выполнять команды и открывать сетевые соединения на сервере. Эти свойства дают возможность выполнять что-нибудь на веб-сервере небезопасное по умолчанию.
PHP разработан специально для того чтобы быть более безопасным языком для написания программ CGI, чем Perl или C. С правильным выбором compile-time и runtime опций конфигурации он дает вам как раз ту комбинацию свободы и безопасности, которая вам нужна.
Как есть много разных путей использования PHP, есть и большой выбор конфигураций, управляющих поведением PHP. Большой выбор опций гарантирует, что вы можете использовать PHP для многих целей, но это также означает что есть комбинации этих опций и, также, конфигураций сервера, которые заканчиваются небезопасной установкой. Эта глава объясняет различные комбинации опций конфигурации и ситуации, в которых они могут быть удачно использованы.
Использование PHP как исполнимых файлов CGI - выбор для установок, которые по некоторой причине не хотят внедрить PHP как модуль в программное обеспечение сервера (подобно Apache), или PHP будет использоваться с другими типами оболочек CGI, чтобы создать надежное окружение chroot и setuid для сценариев. Эта установка обычно включает установку выполняемого(binary) PHP в каталог cgi-bin на веб-сервере.
Бюллетень CERT CA-96.11
рекомендует кроме того, устанавливать любые интерпретаторы в cgi-bin. Даже если исполнимый PHP может быть использован в качестве автономного интерпретатора, PHP разработан для того чтобы предохранить от атаки, которую эта установка делает возможной:
-
Доступ к системным файлам:
http://my.host/cgi-bin/php?/etc/passwd
Информация запроса в url после знака вопроса (?) проходит как аргументы командной строки интерпретатору через интерфейс CGI. Обычно переводчики открывают и выполняют файл указанный как первый аргумент в командной строке.
Вызванный как исполняемый CGI-файл, PHP отказывается интерпретировать командные аргументы строки.
-
Доступ к любым веб-документам на сервере:
http://my.host/cgi-bin/php/secret/doc.html
Часть URL с информацией о пути, стоящая после имени PHP-файла,
/secret/doc.html
обычно используется, чтобы определить имя файла, который должен открываться и интерпретироваться
CGI
программой.
Обычно некоторые директивы конфигурации веб-сервера(Apache:
Action) используются, чтобы перенаправить запросы к документам подобно
http://my.host/secret/script.php3
на PHP интерпретатор. С такой установкой веб-сервер сначала проверяет разрешения доступа в каталоге
/secret
, и потом создает запрос перенаправления
http://my.host/cgi-bin/php/secret/script.php3
. - К несчастью, если запрос не дается изначально в этой форме, веб-сервер не проверяет доступ к файлу
/secret/script.php3
, но только для файла
/cgi-bin/php
. Таким образом любой пользователь, имеющий доступ к
/cgi-bin/php
, получает доступ к любым защищенным документам на сервере.
В PHP, опция compile-time конфигурации
--enable-force-cgi-redirect и директивы runtime-конфигурации
doc_root
и
user_dir
может использоваться для того чтобы отразить эту атаку, если дерево документов сервера имеет любые директории с ограничениями доступа. Смотрите ниже для полного объяснения других комбинаций.
Если ваш сервер не имеет какой-либо информации, которая не ограничивается паролем или управлением доступом на основе ip, нет потребности в этих опциях конфигурации. Если ваш веб-сервер не позволяет вам производить перенаправление, или сервер не имеет пути, чтобы связаться с исполнимым PHP, который запрашивает благополучно перенаправленный запрос, вы можете указать опцию --disable-force-cgi-redirect для конфигурирования сценария.
Вы все еще должны убедиться, что ваши сценарии PHP не полагаются на этот или другой путь вызова сценария, ни непосредственно http://my.host/cgi-bin/php/dir/script.php3, ни переадресацией http://my.host/dir/script.php3.
Перенаправление может быть сконфигурировано, например в Apache, директивами AddHandler и Action (см. ниже).
Эта compile-time опция предохраняет от вызова PHP напрямую с URL подобно http://my.host/cgi-bin/php/secretdir/script.php3. Вместо того чтобы выполнить запрос, PHP выполняет только грамматический разбор в этом способе если он выполнил правила перенаправления вебсервера.
Обычно переадресация в конфигурации Apache сделана со следующими директивами:
Action php3-script /cgi-bin/php
AddHandler php3-script .php3
Эта опция была протестирована только с веб-сервером Apache, и
полагается на Apache чтобы установить не-стандартную внешнюю переменную CGI
REDIRECT_STATUS для перенаправленных запросов.
Если ваш сервер паутины не поддерживает какого-либо способа сообщать что запрос прямой или перенаправленный, Вы не можете использовать эту опцию и Вы должны использовать один из других путей запуска версии CGI, документированной здесь.
Размещение активного содержания, такого как скрипты и модули, в каталогах документов веб-сервера иногда является небезопасной практикой. Если при некоторой ошибке конфигурации сценарии не выполняются, они отображаются как обычные HTML документы, что может закончиться утечкой интеллектуальной собственности или информации безопасности подобно паролям. Поэтому многие сисадмины предпочитают устанавливать другие каталоги для сценариев, которые будут доступны только через PHP CGI и, следовательно, всегда проинтерпретированы и не отображены как таковые.
Также, если недоступен метод перенаправления неуверенных запросов, как описано в предыдущем разделе, необходимо установить корневой каталог(doc_root) сценариев, который отличается от корневого каталога веб-документов.
Вы можете установить корневой каталог для скриптов директивой конфигурации
doc_root
в файле php3.ini , или вы можете установить переменную окружения PHP_DOCUMENT_ROOT. Если это установлено, CGI-версия PHP всегда будет добавлять
doc_root и путь к файлу в запросах, так что вы всегда будете уверенны что за пределами этого каталога скрипты выполняться не будут (кроме user_dir //см.ниже).
Другая используемая опция - user_dir.
Когда user_dir - не установлена, открытием файла управляет только doc_root. Открытие URL подобно http://my.host/~user/doc.php3 не даст результата при открытии файла из каталога пользователя, но вызывается файл ~user/doc.php3 из каталога doc_root (да,имя каталога начинается с тильды [~]).
Если user_dir установлена, например как public_php, запрос, подобный http://my.host/~user/doc.php3 откроет файл doc.php3 в каталоге public_php домашнего каталога пользователя. Если это /home/user, то выполняется /home/user/public_php/doc.php3.
user_dir задается независимо от doc_root, так что вы можете контролировать доступ к document root и user directory отдельно.
Очень безопасная опция должна установить синтаксический анализатор PHP где-нибудь вне дерева файлов web. В /usr/local/bin, например. Обратная сторона этой опции заключается в том что вы должны вставлять строку подобно:
в первую строку любого документа, содержащего PHP тэги. Кроме того, вы должны сделать файлы выполнимыми. Точно так же, как Вы поступаете с любым другим сценарием CGI записанным в Perl или sh или любом другом языке, который использует
#!
shell-escape механизм для самозапуска.
Чтобы PHP получил возможность корректно оперировать с PATH_INFO и PATH_TRANSLATEDпри такой установке, php анализатордолжен быть скомпилирован с опцией конфигурации --enable-discard-path
Когда PHP используется как Apache модуль, не наследуются права пользователя Apache (обычно таковые - "nobody").
|