<?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 => 'de',
  ),
  'this' => 
  array (
    0 => 'security.cgi-bin.attacks.php',
    1 => 'M&ouml;gliche Angriffe',
    2 => 'M&ouml;gliche Angriffe',
  ),
  'up' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'Installiert als CGI-Version',
  ),
  'prev' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'Installiert als CGI-Version',
  ),
  'next' => 
  array (
    0 => 'security.cgi-bin.default.php',
    1 => 'Fall 1: Nur &ouml;ffentliche Dateien vorhanden',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    '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">Mögliche Angriffe</h2>
    <p class="simpara">
     PHP als <abbr title="Common Gateway Interface">CGI</abbr>-Version zu nutzen, ist eine Möglichkeit
     für Installationen, bei denen aus irgendwelchen Gründen kein Modul in
     die Serversoftware eingebunden werden soll (wie beim Apache) oder für
     Systeme, bei denen verschiedene <abbr title="Common Gateway Interface">CGI</abbr>-Wrapper genutzt
     werden sollen, um sichere <strong class="command">chroot</strong>- und
     <strong class="command">setuid</strong>-Umgebungen für Skripte zu schaffen. Bei dieser
     Konfiguration wird das ausführbare <strong class="command">php</strong>-Binary
     üblicherweise im <var class="filename">cgi-bin</var>-Verzeichnis
     des Webservers installiert. CERT-Advisory
     <a href="http://www.cert.org/advisories/CA-1996-11.html" class="link external">&raquo;&nbsp;CA-96.11</a> spricht sich gegen die
     Platzierung von Interpretern im
     <var class="filename">cgi-bin</var>-Verzeichnis aus. Obwohl das
     <strong class="command">php</strong>-Binary als eigenständiger Interpreter verwendet
     werden kann, wurde PHP so entwickelt, um den durch diese Konfiguration
     möglich werdenden Angriffe vorzubeugen:
    </p>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       Zugriff auf Systemdateien: <var class="filename">http://my.host/cgi-bin/php?/etc/passwd</var>
      </span>
      <span class="simpara">
       Die auf ein Fragezeichen (<code class="literal">?</code>) folgende
       Abfrageinformation in einer URL wird durch das CGI-Interface als
       Kommandozeilenargument an den Interpreter weitergereicht. In der
       Kommandozeile wird üblicherweise die im ersten Argument angegebene Datei
       von Interpretern geöffnet und ausgeführt.
      </span>
      <span class="simpara">
       Beim Aufruf als CGI-Binary verweigert <strong class="command">php</strong> die
       Interpretation der Kommandozeilenargumente.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       Zugriff auf beliebige Web-Dokumente auf dem Server: <var class="filename">http://my.host/cgi-bin/php/secret/doc.html</var>
      </span>
      <span class="simpara">
       Der Teil der URL-Pfadinformation nach dem Namen der PHP Binärdatei,
       <var class="filename">/secret/doc.html</var>, wird im
       Allgemeinen benutzt, um den Namen der Datei zu übergeben,
       die durch das <abbr title="Common Gateway Interface">CGI</abbr>-Programm geöffnet und
       interpretiert werden soll.
       Normalerweise werden einige Einträge in der Konfigurationsdatei
       des Webservers benutzt (Apache: <code class="literal">Action</code>), um Aufrufe
       von Dokumenten wie
       <var class="filename">http://my.host/secret/script.php</var> an den
       PHP-Interpreter umzuleiten. Bei dieser Konfiguration überprüft der
       Webserver zuerst die Zugriffsrechte im Verzeichnis
       <var class="filename">/secret</var> und erstellt anschließend den
       umgeleiteten Aufruf <var class="filename">http://my.host/cgi-bin/php/secret/script.php</var>.
       Unglücklicherweise wird, wenn der Aufruf bereits in dieser Form
       geschieht, vom Webserver keine Zugriffsüberprüfung der Datei
       <var class="filename">/secret/script.php</var>, sondern
       lediglich der Datei <var class="filename">/cgi-bin/php</var>
       vorgenommen. So ist
       jeder Benutzer, der auf <var class="filename">/cgi-bin/php</var>
       zugreifen darf, in der Lage, sich zu jedem geschützten Dokument
       auf dem Webserver Zugriff zu verschaffen.
      </span>
      <span class="simpara">
       Bei PHP können beim Kompilieren die Konfigurationsdirektiven <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> und <a href="ini.core.php#ini.user-dir" class="link">user_dir</a>
       benutzt werden, um diesen Angriff zu verhindern, falls
       der Verzeichnisbaum des Servers Verzeichnisse mit
       Zugriffsbeschränkungen beinhaltet.
       Ausführliche Informationen über die verschiedenen Kombinationen
       sind weiter unten beschrieben.
      </span>
     </li>
    </ul>
   </div><?php manual_footer($setup); ?>