Вариант 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 (да, имя
директории начинается с символа ~
).
Но если user_dir установлена, например, в значение public_php, то запрос вида http://my.host/~user/doc.php откроет файл doc.php, находящийся в домашнем каталоге пользователя, в директории public_php. Например, если домашний каталог пользователя /home/user, будет выполнен файл /home/user/public_php/doc.php.
Установка опции user_dir
происходит
независимо от установки doc_root
,
таким образом вы можете контролировать корневую директорию веб-сервера
и пользовательские директории независимо друг от друга.