<?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 => 'ja',
  ),
  'this' => 
  array (
    0 => 'security.cgi-bin.attacks.php',
    1 => '受ける可能性がある攻撃',
    2 => '受ける可能性がある攻撃',
  ),
  'up' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'CGI バイナリとしてインストール',
  ),
  'prev' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'CGI バイナリとしてインストール',
  ),
  'next' => 
  array (
    0 => 'security.cgi-bin.default.php',
    1 => 'ケース 1: 配布制限がないファイルのみを配布',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    '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 のような)サーバーソフトウエアに組み込み
      たくない何らかの理由がある場合や安全な chroot と setuid 環境をス
     クリプトに提供する他の <abbr title="Common Gateway Interface">CGI</abbr> ラッパーと組み合わせて PHP を使用する
     場合の設定オプションです。セットアップ時には、通常、
     <strong class="command">php</strong> 実行バイ
     ナリを Web サーバーの
     <var class="filename">cgi-bin</var>
     ディレクトリにインストールします。
     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 は、セットアップにより生じる可能性がある
     次のような攻撃を防ぐように設計されています。
    </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">
       URL において疑問符 (<code class="literal">?</code>)
       の後のクエリー情報は、CGI インターフェー
       スにより、インタプリタにコマンドライン引数として渡されます。通
       常、インタプリタは、コマンドライン上の最初の引数に指定されたファ
       イルを開き、実行します。
      </span>
      <span class="simpara">
       CGI バイナリとして実行された場合、<strong class="command">php</strong> は、
       コマンドライン引数の解釈を拒否します。
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       サーバー上の Web ドキュメントへのアクセス: <var class="filename">http://my.host/cgi-bin/php/secret/doc.html</var>
      </span>
      <span class="simpara">
       URL の PHP バイナリ名の後のパス情報の部分、つまり<var class="filename">/secret/doc.html</var> は、
       <abbr title="Common Gateway Interface">CGI</abbr> プログラムによりオープンされて実行される
       ファイルの名前を指定するために従来より使用されています。
       <var class="filename">http://my.host/secret/script.php</var>
       のようなドキュメントへの要求を PHP インタプリタにリダイレクト
       するために、通常、何らかの Web サーバー設定用命令(Apache では <code class="literal">Action</code>)
       が使用されます。この設定により、Web サーバーは、まずディレクトリ 
       <var class="filename">/secret</var> へのアクセス権をチェックし、
       リダイレクト要求 <var class="filename">http://my.host/cgi-bin/php/secret/script.php</var>
       を生成します。残念なことに、リクエストが最初からこの形式で与え
       られた場合、Web サーバーによるアクセスチェックは、
       <var class="filename">/secret/script.php</var> ファイル
       ではなく、<var class="filename">/cgi-bin/php</var> ファイル
       に対して行われます。この手法により、<var class="filename">/cgi-bin/php</var> にアクセス可能なユーザーは、
       Web サーバー上の全ての保護されたドキュメントにアクセスできてし
       まいます。
      </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> をこの攻撃を防止す
       るために使用することができます。  これらを組み合わせたいくつか
       の手法について以下に詳細な説明を示します。
      </span>
     </li>
    </ul>
   </div><?php manual_footer($setup); ?>