<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/security.cgi-bin.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'security.cgi-bin.doc-root.php',
    1 => 'Вариант 3: включение директив doc_root или user_dir',
    2 => 'Вариант 3: включение директив doc_root или user_dir',
  ),
  'up' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'О безопасности PHP в режиме CGI-программы',
  ),
  'prev' => 
  array (
    0 => 'security.cgi-bin.force-redirect.php',
    1 => 'Вариант 2: включение директивы cgi.force_redirect',
  ),
  'next' => 
  array (
    0 => 'security.cgi-bin.shell.php',
    1 => 'Вариант 4: PHP вне дерева веб-документов',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'security/cgi-bin.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="security.cgi-bin.doc-root" class="sect1">
    <h2 class="title">Вариант 3: включение директив doc_root или user_dir</h2>
    <p class="simpara">
     Включение в каталоги документов веб-сервера активного содержимого
     наподобие скриптов и исполняемых файлов ослабляет безопасность.
     Из-за ошибок в конфигурации сервера, когда скрипты не выполняются, а отображаются
     в браузере как HTML-документы, утекает интеллектуальная собственность
     или конфиденциальная информация наподобие паролей.
     Поэтому системные администраторы отдают преимущество настройке другой структуры
     каталогов хранения скриптов, к которым открывают доступ только через CGI-интерфейс PHP,
     который гарантирует интерпретацию, а не вывод кода скриптов.
    </p>
    <p class="simpara">
     Потребуется установить через директиву <a href="ini.core.php#ini.doc-root" class="link">doc_root</a>
     корневой каталог, который отличается от корневого каталога веб-документов,
     если метод, который проверяет запросы на перенаправление, как описывает предыдущая глава,
     недоступен.
    </p>
    <p class="simpara">
     Корневой каталог для PHP-скриптов устанавливают
     <a href="configuration.file.php" class="link">в файле конфигурации PHP</a>
     через директиву <a href="ini.core.php#ini.doc-root" class="link">doc_root</a>
     или через переменную окружения <var class="envar">PHP_DOCUMENT_ROOT</var>.
     При установке корневого каталога для PHP-скриптов <abbr title="Common Gateway Interface">CGI</abbr>-версия
     двоичного файла PHP сформирует путь к файлу, который требуется открыть,
     на основе значения директивы <code class="parameter">doc_root</code> и пути,
     который указали в запросе. Это гарантирует, что скрипты за пределами
     этого каталога, за исключением каталога <code class="parameter">user_dir</code>,
     не выполнятся.
    </p>
    <p class="simpara">
     Другая директива, которая помогает создавать безопасные пути к файлам, —
     <a href="ini.core.php#ini.user-dir" class="link">user_dir</a>. Путём к файлу, который требуется открыть,
     управляет только директива <code class="parameter">doc_root</code>, если директиву
     <code class="parameter">user_dir</code> не установили. При запросе URL-адреса наподобие
     <var class="filename">http://my.host/~user/doc.php</var> обработчик откроет файл
     с названием <var class="filename">~user/doc.php</var> (да, название каталога
     начинается с символа <code class="literal">~</code>) в каталоге, который установили в директиве
     <code class="parameter">doc_root</code>, а не файл в домашнем каталоге пользователей.
    </p>
    <p class="simpara">
     Но если для директивы <code class="parameter">user_dir</code> установили значение наподобие
     <var class="filename">public_php</var>, то запрос URL-адреса
     <var class="filename">http://my.host/~user/doc.php</var>
     откроет файл <var class="filename">doc.php</var>, который лежит
     в домашнем каталоге пользователя в директории <var class="filename">public_php</var>.
     Приведём пример. Обработчик выполнит файл <var class="filename">/home/user/public_php/doc.php</var>,
     если домашний каталог пользователя <var class="filename">/home/user</var>.
    </p>
    <p class="simpara">
     PHP разворачивает значение директивы <code class="parameter">user_dir</code>
     независимо от настройки директивы <code class="parameter">doc_root</code>,
     поэтому управлять корневым каталогом документов веб-сервера
     и каталогом пользователя разрешается по отдельности.
    </p>
   </div><?php manual_footer($setup); ?>