<?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.attacks.php',
    1 => 'Возможные атаки',
    2 => 'Возможные атаки',
  ),
  'up' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'О безопасности PHP в режиме CGI-программы',
  ),
  'prev' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'О безопасности PHP в режиме CGI-программы',
  ),
  'next' => 
  array (
    0 => 'security.cgi-bin.default.php',
    1 => 'Вариант 1: обслуживание только общедоступных файлов',
  ),
  '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.attacks" class="sect1">
  <h2 class="title">Возможные атаки</h2>
  <p class="simpara">
   Установка PHP в виде двоичного файла, который взаимодействует с веб-сервером
   по протоколу <abbr title="Common Gateway Interface">CGI</abbr>, представляет альтернативу
   интегрированию PHP в серверное ПО наподобие веб-сервера Apache в виде модуля
   и альтернативу установкам, которым придётся использовать PHP с набором
   <abbr title="Common Gateway Interface">CGI</abbr>-обёрток, чтобы сделать окружения для скриптов безопасными
   в части установки утилитами <strong class="command">chroot</strong> и <strong class="command">setuid</strong>
   корневого каталога и идентификатора пользователя, от имени которого выполнится скрипт.
   При установке PHP в виде CGI-программы исполняемый двоичный файл <strong class="command">php</strong>
   часто устанавливают в каталог веб-сервера <var class="filename">cgi-bin</var>.
   Компьютерная группа реагирования на чрезвычайные ситуации (англ. Computer Emergency Response Team, CERT)
   подготовила рекомендацию <a href="http://www.cert.org/advisories/CA-1996-11.html" class="link external">&raquo;&nbsp;CA-96.11</a>, в которой не советует
   располагать интерпретаторы в каталоге <var class="filename">cgi-bin</var>.
   Двоичный файл <strong class="command">php</strong> спроектировали так, чтобы даже при работе в качестве
   автономного интерпретатора файл защищал от атак, риск которых появляется при установке PHP в режиме CGI:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Доступ к системным файлам через запрос вида: <var class="filename">http://my.host/cgi-bin/php?/etc/passwd</var>.
    </span>
    <span class="simpara">
     Информация в query-компоненте, который URL-адрес запроса содержит
     после вопросительного знака (<code class="literal">?</code>), передаётся
     интерпретатору через CGI-интерфейс как аргументы командной строки.
     Стандартное поведение интерпретатора — открыть и исполнить в командной строке файл,
     который указали как первый аргумент запроса.
    </span>
    <span class="simpara">
     В режиме CGI-обработчика <strong class="command">php</strong> не станет
     интерпретировать аргументы командной строки.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Доступ к произвольному документу на сервере:
     <var class="filename">http://my.host/cgi-bin/php/secret/doc.html</var>.
    </span>
    <span class="simpara">
     Информация в path-части URL-адреса наподобие <var class="filename">/secret/doc.html</var>,
     которая идёт после названия двоичного файла PHP, указывает название файла,
     который <abbr title="Common Gateway Interface">CGI</abbr>-программа откроет и интерпретирует.
     Отдельные директивы конфигурации наподобие директивы <code class="literal">Action</code>
     в конфигурации веб-сервера Apache указывают, чтобы перенаправить запрос к документам вида
     <var class="filename">http://my.host/secret/script.php</var> к интерпретатору PHP.
     При такой настройке веб-сервер сначала проверяет права доступа к каталогу
     <var class="filename">/secret</var>, а затем создаёт и перенаправляет запрос к файлу
     <var class="filename">http://my.host/cgi-bin/php/secret/script.php</var>.
     К сожалению, веб-сервер проверит права доступа только к файлу <var class="filename">/cgi-bin/php</var>,
     но не проверит права доступа к файлу <var class="filename">/secret/script.php</var>,
     если запрос в самом начале задали в полной форме. Поэтому пользователи с доступом
     к файлу <var class="filename">/cgi-bin/php</var> получат доступ к защищённым документам на сервере.
    </span>
    <span class="simpara">
     Для предотвращения атак, которые направляют на каталоги с ограничениями доступа,
     если такие содержит дерево документов сервера, в PHP пользуются директивами конфигурации
     <a href="ini.core.php#ini.cgi.force-redirect" class="link">cgi.force_redirect</a>,
     <a href="ini.core.php#ini.doc-root" class="link">doc_root</a>
     и <a href="ini.core.php#ini.user-dir" class="link">user_dir</a>, которые PHP учитывает при выполнении кода.
     Подробнее опции и их комбинации рассматривают следующие главы раздела.
    </span>
   </li>
  </ul>
 </div><?php manual_footer($setup); ?>