Вариант 3: использование опций doc_root и user_dir
Размещение динамического контента, такого как скрипты либо любые
другие исполняемые файлы, в директории веб-сервера делает его
потенциально опасным. В случае, если в конфигурации сервера допущена
ошибка, возможна ситуация, когда скрипты не выполняются, а отображаются
в браузере, как обычные HTML-документы, что может привести к утечке конфиденциальной
информации (например, паролей), либо информации, являющейся
интеллектуальной собственностью. Исходя из таких соображений, многие
системные администраторы предпочитают использовать для хранения скриптов
отдельную директорию, работая со всеми размещенными в ней файлами
по CGI-интерфейсу.
В случае, если невозможно гарантировать, что запросы не перенаправляются,
как было показано в предыдущем разделе, необходимо указывать
переменную doc_root, которая отличается от корневой директории веб-документов.
Вы можете установить корневую директорию для PHP-скриптов, настроив
параметр doc_root в
конфигурационном файле,
либо установив переменную окружения PHP_DOCUMENT_ROOT.
В случае, если PHP используется посредством CGI, полный путь к открываемому
файлу будет построен на основании значения переменной doc_root
и указанного в запросе пути. Таким образом, вы можете быть уверены,
что скрипты будут выполняться только внутри указанной вами директории
(кроме директории user_dir
, которая описана ниже).
Еще одна используемая при настройке безопасности опция -
user_dir. В случае, если
переменная user_dir не установлена, путь к открываемому файлу
строится относительно doc_root
. Запрос
вида http://my.host/~user/doc.php
приводит к выполнению скрипта, находящегося не в домашнем каталоге
соответствующего пользователя, а находящегося в подкаталоге doc_root
скрипта ~user/doc.php (да, имя
директории начинается с символа ~).
Но если переменной public_php
присвоено значение, например, http://my.host/~user/doc.php,
тогда в приведенном выше примере будет выполнен скрипт doc.php,
находящийся в домашнем каталоге пользователя, в директории public_php.
Например, если домашний каталог пользователя /home/user,
будет выполнен файл /home/user/public_php/doc.php.
Установка опции user_dir
происходит
независимо от установки doc_root
,
таким образом вы можете контролировать корневую директорию веб-сервера
и пользовательские директории независимо друг от друга.