<?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 => 'fr',
  ),
  'this' => 
  array (
    0 => 'security.cgi-bin.doc-root.php',
    1 => 'Cas 3 : Utilisation du &quot;doc_root&quot; ou du &quot;user_dir&quot;',
    2 => 'Cas 3 : Utilisation du &quot;doc_root&quot; ou du &quot;user_dir&quot;',
  ),
  'up' => 
  array (
    0 => 'security.cgi-bin.php',
    1 => 'Binaires CGI',
  ),
  'prev' => 
  array (
    0 => 'security.cgi-bin.force-redirect.php',
    1 => 'Cas 2 : Utilisation de la directive
     cgi.force_redirect',
  ),
  'next' => 
  array (
    0 => 'security.cgi-bin.shell.php',
    1 => 'Cas 4 : Ex&eacute;cutable PHP &agrave; l\'ext&eacute;rieur de l\'arborescence du serveur',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    '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">Cas 3 : Utilisation du &quot;doc_root&quot; ou du &quot;user_dir&quot;</h2>
    <p class="simpara">
     Ajouter un contenu interactif, comme des scripts ou des exécutables, dans les répertoires
     de documents du serveur web, est parfois considéré comme une
     pratique non-sécurisée. Si, à cause d&#039;une erreur de configuration, le script n&#039;est pas
     exécuté mais affiché comme une page HTML classique,
     il peut en résulter une fuite de propriété intellectuelle
     ou d&#039;informations liées à la sécurité, comme, typiquement, des mots de passe.
     En conséquence, un bon nombre d&#039;administrateurs
     préfèrent mettre en place un répertoire
     spécial pour les scripts, qui soit uniquement accessible par le biais
     du binaire CGI de PHP, ce qui signifie que tous les fichiers de ce répertoire
     seront interprétés et jamais affichés tels quels.
    </p>
    <p class="simpara">
     De plus, s&#039;il n&#039;est pas possible d&#039;utiliser la méthode
     qui permet de s&#039;assurer que les requêtes ne sont pas redirigées,
     comme présentée ci-dessus, il est nécessaire de mettre
     en place un répertoire de scripts &quot;doc_root&quot; différent du
     répertoire &quot;document root&quot; du serveur web.
    </p>
    <p class="simpara">
     Pour indiquer la racine des scripts PHP, il est possible d&#039;utiliser la directive
     <a href="ini.core.php#ini.doc-root" class="link">doc_root</a> dans le
     <a href="configuration.file.php" class="link">fichier de configuration</a>,
     ou il est possible d&#039;affecter la variable d&#039;environnement
     <var class="envar">PHP_DOCUMENT_ROOT</var>. Si cette information
     est renseignée, le binaire <abbr title="Common Gateway Interface">CGI</abbr> de PHP construira
     toujours le nom de fichier à ouvrir avec <code class="parameter">doc_root</code>
     et le &quot;path information&quot; de la requête, ce qui garantit
     qu&#039;aucun script ne sera exécuté en dehors du répertoire
     prédéfini (à l&#039;exception du répertoire
     désigné par la directive <code class="parameter">user_dir</code> -
     voir ci-dessous).
    </p>
    <p class="simpara">
     Une autre option possible ici est la directive
     <a href="ini.core.php#ini.user-dir" class="link">user_dir</a>. Lorsque <code class="parameter">user_dir</code>
     n&#039;est pas spécifiée, seuls les fichiers contenus dans le répertoire
     <code class="parameter">doc_root</code> peuvent être ouverts.
     Ouvrir un fichier possédant l&#039;url
     <var class="filename">http://my.host/~user/doc.php</var> ne correspondra
     pas à l&#039;ouverture d&#039;un fichier sous le répertoire racine de
     l&#039;utilisateur, mais à l&#039;ouverture du fichier
     <var class="filename">~user/doc.php</var> sous le répertoire
     <code class="parameter">doc_root</code> (oui, un nom de répertoire commençant par un tilde
     [<code class="literal">~</code>]).
    </p>
    <p class="simpara">
     Si la directive <code class="parameter">user_dir</code> est activée, par exemple à la valeur
     <var class="filename">public_php</var>, une requête
     du type <var class="filename">http://my.host/~user/doc.php</var>
     ouvrira un fichier appelé <var class="filename">doc.php</var> dans le
     répertoire appelé <var class="filename">public_php</var>
     sous le répertoire racine de l&#039;utilisateur.
     Si le répertoire racine de l&#039;utilisateur est
     <var class="filename">/home/user</var>, le fichier exécuté
     sera <var class="filename">/home/user/public_php/doc.php</var>.
    </p>
    <p class="simpara">
     <code class="parameter">user_dir</code> et <code class="parameter">doc_root</code> sont
     deux directives totalement indépendantes, et il est donc possible de
     contrôler l&#039;accès au répertoire &quot;document root&quot;
     séparément des répertoires &quot;user directory&quot;.
    </p>
   </div><?php manual_footer($setup); ?>