downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Our source is open

The syntax highlighted source is automatically generated by PHP from the plaintext script. If you're interested in what's behind the several functions we used, you can always take a look at the source of the following files:

Of course, if you want to see the source of this page, we have it available. You can also browse the SVN repository for this website on svn.php.net.

Source of: /manual/fr/ini.sect.safe-mode.php

<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once
dirname(__FILE__) ."/toc/features.safe-mode.inc";
$setup = array (
 
'home' =>
  array (
   
0 => 'index.php',
   
1 => 'PHP Manual',
  ),
 
'head' =>
  array (
   
0 => 'UTF-8',
   
1 => 'fr',
  ),
 
'this' =>
  array (
   
0 => 'ini.sect.safe-mode.php',
   
1 => 'Sécurité et "Safe Mode"',
  ),
 
'up' =>
  array (
   
0 => 'features.safe-mode.php',
   
1 => 'Safe mode',
  ),
 
'prev' =>
  array (
   
0 => 'features.safe-mode.php',
   
1 => 'Safe mode',
  ),
 
'next' =>
  array (
   
0 => 'features.safe-mode.functions.php',
   
1 => 'Fonctions désactivées par le Safe Mode',
  ),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);

manual_header();
?>
<div id="ini.sect.safe-mode" class="sect1">
   <h2 class="title">Sécurité et &quot;Safe Mode&quot;</h2>
   <p class="para">
    </p><table class="doctable table">
      <caption><b>Options de configuration</b></caption>
    
      <thead valign="middle">
       <tr valign="middle">
        <th>Nom</th>
        <th>Par défaut</th>
        <th>Modifiable</th>
        <th>Historique</th>
       </tr>

      </thead>

      <tbody valign="middle" class="tbody">
      <tr valign="middle">
       <td align="left">safe_mode</td>
       <td align="left">&quot;0&quot;</td>
       <td align="left">PHP_INI_SYSTEM</td>
       <td align="left">Supprimé en PHP 6.0.0.</td>
      </tr>

      <tr valign="middle">
       <td align="left">safe_mode_gid</td>
       <td align="left">&quot;0&quot;</td>
       <td align="left">PHP_INI_SYSTEM</td>
       <td align="left">Disponible depuis PHP 4.1.0. Supprimé en PHP 6.0.0.</td>
      </tr>

      <tr valign="middle">
       <td align="left">safe_mode_include_dir</td>
       <td align="left">NULL</td>
       <td align="left">PHP_INI_SYSTEM</td>
       <td align="left">Disponible depuis PHP 4.1.0.Supprimé en PHP 6.0.0.</td>
      </tr>

      <tr valign="middle">
       <td align="left">safe_mode_exec_dir</td>
       <td align="left">&quot;&quot;</td>
       <td align="left">PHP_INI_SYSTEM</td>
       <td align="left">Supprimé en PHP 6.0.0.</td>
      </tr>

      <tr valign="middle">
       <td align="left">safe_mode_allowed_env_vars</td>
       <td align="left">&quot;PHP_&quot;</td>
       <td align="left">PHP_INI_SYSTEM</td>
       <td align="left">Supprimé en PHP 6.0.0.</td>
      </tr>

      <tr valign="middle">
       <td align="left">safe_mode_protected_env_vars</td>
       <td align="left">&quot;LD_LIBRARY_PATH&quot;</td>
       <td align="left">PHP_INI_SYSTEM</td>
       <td align="left">Supprimé en PHP 6.0.0.</td>
      </tr>

      <tr valign="middle">
       <td align="left">open_basedir</td>
       <td align="left">NULL</td>
       <td align="left">PHP_INI_ALL</td>
       <td align="left">PHP_INI_SYSTEM en PHP &lt; 5.3.0.</td>
      </tr>

      <tr valign="middle">
       <td align="left">disable_functions</td>
       <td align="left">&quot;&quot;</td>
       <td align="left"><var class="filename">php.ini</var> seulement</td>
       <td align="left">Disponible depuis PHP 4.0.1.</td>
      </tr>

      <tr valign="middle">
       <td align="left">disable_classes</td>
       <td align="left">&quot;&quot;</td>
       <td align="left"><var class="filename">php.ini</var> seulement</td>
       <td align="left">Disponible depuis PHP 4.3.2.</td>
      </tr>

      </tbody>
    
    </table>
<p>
    Pour plus de détails sur les modes PHP_INI_*,
reportez-vous à <a href="configuration.changes.modes.php" class="xref">Où une directive de configuration peut être modifiée</a>.
   </p>
  
   <p class="para">Voici un éclaircissement sur
l&#039;utilisation des directives de configuration.</p>
  
   <p class="para">
    </p><dl>

     <dt id="ini.safe-mode" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">safe_mode</tt></i>

       <span class="type booléen">booléen</span>
      </span>

      </dt><dd class="listitem">

       <p class="para">
        Active ou non le mode de sécurité de PHP.
        Si PHP est compilé avec <i>--enable-safe-mode</i>, la valeur par défaut
        sera On, sinon Off.
       </p>
      </dd>

    
     <dt id="ini.safe-mode-gid" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">safe_mode_gid</tt></i>

       <span class="type booléen">booléen</span>
      </span>

      </dt><dd class="listitem">

       <p class="para">
        Par défaut, le safe mode fait une comparaison des
        propriétaires, avant d&#039;ouvrir un fichier. Si vous voulez
        alléger un peu ce niveau de sécurité, vous pouvez
        réaliser une comparaison de groupe, et activer cette
        directive.
        Si cette directive vaut <b><tt class="constant">FALSE</tt></b> (sa valeur par défaut),
        c&#039;est une comparaison sur les <i>UID</i>,
        et, si elle vaut <b><tt class="constant">TRUE</tt></b> c&#039;est une comparaison sur les
        <i>GID</i>.
       </p>
      </dd>

    
     <dt id="ini.safe-mode-include-dir" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">safe_mode_include_dir</tt></i>

       <a href="language.types.string.php" class="link">chaîne de caractères</a>
      </span>

      </dt><dd class="listitem">

       <p class="para">
        Les vérifications basées sur le <i>UID</i> ou <i>GID</i>
        sont ignorées lorsque les fichiers inclus sont placés dans le dossier
        indiqué par cette directive, ainsi que ses sous-dossiers. Les
        dossiers peuvent être aussi dans l&#039;<a href="ini.core.php#ini.include-path" class="link">include_path</a>
        ou bien il faut inclure le chemin complet.
       </p>
       <span class="simpara">
        Depuis PHP 4.2.0, cette directive utilise le point virgule
        de la même façon que le fait
        <a href="ini.core.php#ini.include-path" class="link">include_path</a>, pour
        permettre de configurer plusieurs dossiers.
       </span>
       <span class="simpara">
        La restriction spécifiée est en fait un préfixe, plus qu&#039;un
        nom de dossier. Cela signifie que &quot;<i>safe_mode_include_dir = /dir/incl</i>&quot;
        autorise aussi bien &quot;<i>/dir/include</i>&quot; que
        &quot;<i>/dir/incls</i>&quot;, s&#039;ils existent.
        Lorsque vous souhaitez restreindre l&#039;accès à un dossier spécifique,
        il faut terminer cette directive avec un slash. Par exemple
        &quot;<i>safe_mode_include_dir = /dir/incl/</i>&quot;.
       </span>
       <span class="simpara">
        Si la valeur de cette directive est vide, aucun fichier avec le
        <i>UID</i>/<i>GID</i> différent ne peut
        être inclus dans PHP 4.2.3 et dans les versions PHP 4.3.3 et plus récentes.
        Dans les versions antérieures, tous les fichiers pouvaient être inclus.
       </span>
      </dd>

    
     <dt id="ini.safe-mode-exec-dir" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">safe_mode_exec_dir</tt></i>

       <a href="language.types.string.php" class="link">chaîne de caractères</a>
      </span>

      </dt><dd class="listitem">

       <p class="para">
        Si PHP est utilisé en safe mode, les fonctions comme <a href="function.system.php" class="function">system()</a>
        et toutes celles qui permettent l&#039;exécution en
        <a href="ref.exec.php" class="link">ligne de commande</a> refuseront d&#039;exécuter des programmes
        qui ne sont pas dans ce dossier.
        Vous devez utiliser <i>/</i> en tant que séparateur de dossier
        sous tous les environnements, y compris Windows.
       </p>
      </dd>

    
     <dt id="ini.safe-mode-allowed-env-vars" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">safe_mode_allowed_env_vars</tt></i>

       <a href="language.types.string.php" class="link">chaîne de caractères</a>
      </span>

      </dt><dd class="listitem">

       <p class="para">
        Modifier certaines variables d&#039;environnement est un trou de
        sécurité potentiel. Cette directive contient une liste de noms de
        variables d&#039;environnement séparées par des virgules, ou de préfixes.
        En Safe mode, l&#039;utilisateur ne pourra modifier que les
        variables d&#039;environnement dont le nom commence par l&#039;un des préfixes
        fourni ici. Par défaut, les utilisateurs ne peuvent modifier que
        les variables d&#039;environnement qui commencent par <i>PHP_</i>
        (e.g. <i>PHP_FOO=BAR</i>).
       </p>
       <blockquote><p><b class="note">Note</b>:
       
         Si cette directive est vide, PHP autorisera la modification
         de TOUTES les variables d&#039;environnement.
        <br />
       </p></blockquote>
      </dd>

    
     <dt id="ini.safe-mode-protected-env-vars" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">safe_mode_protected_env_vars</tt></i>

       <a href="language.types.string.php" class="link">chaîne de caractères</a>
      </span>

      </dt><dd class="listitem">

       <p class="para">
        Cette directive contient une liste de variables d&#039;environnement
        que le programmeur ne pourra pas modifier en utilisant la
        fonction <a href="function.putenv.php" class="function">putenv()</a>. Ces variables seront protégées,
        même si la directive <span class="option">safe_mode_allowed_env_vars</span> autorise leur
        modification.
       </p>
      </dd>

    
      <dt id="ini.open-basedir" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">open_basedir</tt></i>

       <a href="language.types.string.php" class="link">chaîne de caractères</a>
      </span>

      </dt><dd class="listitem">

       <p class="para">
        Limite les fichiers accessibles par PHP dans l&#039;arborescence.
        Cette directive <em class="emphasis">n&#039;est pas</em> affectée
        par le safe mode.
       </p>
       <p class="para">
        Lorsqu&#039;un script tente d&#039;ouvrir un fichier, avec les fonctions
        <a href="function.fopen.php" class="function">fopen()</a> ou <a href="function.gzopen.php" class="function">gzopen()</a>, la situation
        du fichier est vérifiée. Si le fichier se situe hors du dossier
        spécifié dans cette directive, PHP refusera de l&#039;ouvrir.
        Les liens symboliques sont résolus, ce qui fait que cette
        restriction ne peut être contournée par un lien symbolique.
        Si le fichier n&#039;existe pas, le lien symbolique ne pourra pas être résolu
        et le nom de fichier sera comparé à <span class="option">open_basedir</span>.
       </p>
       <p class="para">
        La valeur spéciale <code class="systemitem systemitem">.</code>

        indique que le dossier dans lequel le script est stocké servira de
        dossier de base. Cela est cependant un peu dangereux car le dossier
        courant du script peut facilement être modifié avec la fonction
        <a href="function.chdir.php" class="function">chdir()</a>.
       </p>
        <p class="para">
         Dans <var class="filename">httpd.conf</var>, <span class="option">open_basedir</span> peut être désactivée
         (i.e. pour certains hôtes virtuels)
         <a href="configuration.changes.php#configuration.changes.apache" class="link">de la même manière</a> que
         toute autre directive de configuration avec la syntaxe
         &quot;<i>php_admin_value open_basedir none</i>&quot;.
       </p>
       <p class="para">
        Sous Windows, séparez les dossiers par des points virgules. Sur les autres
        systèmes, séparez les dossiers avec des deux-points. Lorsque PHP est utilisé
        comme module Apache, les chemins de la directive <span class="option">open_basedir</span> des
        dossiers parents sont automatiques transmis.
       </p>
       <p class="para">
        La restriction spécifiée par <span class="option">open_basedir</span> est en fait un
        préfixe et non un dossier. Cela signifie que
        &quot;<i>open_basedir = /dir/incl</i>&quot; donne accès au dossier
        &quot;<i>/dir/include</i>&quot;
        et aussi au dossier &quot;<i>/dir/incls</i>&quot; s&#039;il existe. Lorsque vous souhaitez
        restreindre l&#039;accès à un dossier spécifique, ajoutez un slash final.
        Par exemple : <i>open_basedir = /dir/incl/</i>.
       </p>
       <p class="para">
        La valeur par défaut permet l&#039;ouverture de
        tous les fichiers.
       </p>
       <blockquote><p><b class="note">Note</b>:
       
         Depuis PHP 5.3.0, open_basedir peut être modifié au moment de l&#039;exécution.
         Cela signifie que si open_basedir est défini à <i>/www/</i>
         dans votre fichier <var class="filename">php.ini</var>, un script peut le modifier en
         <i>/www/tmp/</i> au moment de l&#039;exécution via la fonction
         <a href="function.ini-set.php" class="function">ini_set()</a>.
        <br />
       </p></blockquote>
      </dd>

    
     <dt id="ini.disable-functions" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">disable_functions</tt></i>

       <a href="language.types.string.php" class="link">chaîne de caractères</a>
      </span>

      </dt><dd class="listitem">

       <span class="simpara">
        Cette directive vous permet de désactiver certaines fonctions
        pour des raisons de <a href="security.php" class="link">sécurité</a>. Elle
        prend une liste de nom de fonctions, séparés par des
        virgules. <i><tt class="parameter">disable_functions</tt></i>

        n&#039;est pas affectée par le <a href="ini.sect.safe-mode.php#ini.safe-mode" class="link">Safe Mode</a>.
       </span>
       <span class="simpara">
        Cette directive doit être configurée dans le fichier <var class="filename">php.ini</var>. Par exemple,
        vous ne pourrez pas la configurer dans le fichier
        <var class="filename">httpd.conf</var>.
       </span>
      </dd>

    
     <dt id="ini.disable-classes" class="varlistentry">
      <span class="term">
       <i><tt class="parameter">disable_classes</tt></i>

       <a href="language.types.string.php" class="link">chaîne de caractères</a>
      </span>

      </dt><dd class="listitem">

       <span class="simpara">
        Cette directive vous permet de désactiver certaines classes
        pour des raisons de <a href="security.php" class="link">sécurité</a>. Elle
        prend une liste de nom de fonctions, séparées par des
        virgules. <i><tt class="parameter">disable_functions</tt></i>
 n&#039;est pas
        affectée par le <a href="ini.sect.safe-mode.php#ini.safe-mode" class="link">Safe Mode</a>.
       </span>
       <span class="simpara">
        Cette directive doit être configurée dans le fichier <var class="filename">php.ini</var>. Par exemple,
        vous ne pourrez pas la configurer dans le fichier
        <var class="filename">httpd.conf</var>.
       </span>
       <blockquote><p><b class="note">Note</b>:
        <b>Disponibilité</b><br />
          <span class="simpara">
           Cette directive est disponible depuis PHP 4.3.2
          </span>
       </p></blockquote>
      </dd>

    
    </dl>
<p>
   </p>
   <p class="para">
    Voir aussi
    <a href="ini.core.php#ini.register-globals" class="link">register_globals</a>,
    <a href="errorfunc.configuration.php#ini.display-errors" class="link">display_errors</a> et
    <a href="errorfunc.configuration.php#ini.log-errors" class="link">log_errors</a>.
   </p>

   <p class="para">
    Lorsque <a href="ini.sect.safe-mode.php#ini.safe-mode" class="link">Safe Mode</a> est actif, PHP
    vérifie que le propriétaire du script courant est le même que le propriétaire des
    fichiers ou dossiers qui seront manipulés par ce script. Par exemple,
    dans la situation suivante :
    </p><div class="example-contents programlisting">
<div class="lscode"><pre class="lscode">-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.php
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd</pre>
</div>
    </div>
<p>
    exécuter le script <var class="filename">script.php</var> :
    </p><div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />&nbsp;readfile</span><span style="color: #007700">(</span><span style="color: #DD0000">'/etc/passwd'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>
<p>
    générera cette erreur, si le Safe Mode est activé :
    <div class="example-contents screen">
<div class="cdata"><pre>
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2
</pre></div>
   </div>
  </p>
  <p class="para">
   Cependant, il arrive que la vérification faite avec le nom du propriétaire
   (<i>UID</i>) du fichier soit trop restrictive, et qu&#039;une
   vérification sur le nom du groupe (<i>GID</i>) soit suffisante.
   C&#039;est une autre fonctionnalité supportée
   par la directive <a href="ini.sect.safe-mode.php#ini.safe-mode-gid" class="link">safe_mode_gid</a>.
   En lui donnant la valeur de <i>On</i>, les vérifications
   seront faites sur le <i>GID</i>, alors qu&#039;en lui laissant
   sa valeur par défaut de <i>Off</i>, les vérifications seront
   faites sur le <i>UID</i>.
  </p>
  <p class="para">
   Si au lieu d&#039;utiliser le <a href="ini.sect.safe-mode.php#ini.safe-mode" class="link">Safe Mode</a>,
   vous utilisez la directive <a href="ini.sect.safe-mode.php#ini.open-basedir" class="link">open_basedir</a>,
   alors les manipulations seront limitées aux fichiers situés
   dans les dossiers spécifiés. Par exemple (Apache <var class="filename">httpd.conf</var>) :
   </p><div class="example-contents programlisting">
<div class="inicode"><pre class="inicode">&lt;Directory /docroot&gt;
  php_admin_value open_basedir /docroot
&lt;/Directory&gt;</pre>
</div>
   </div>
<p>
   Si vous exécutez le script <var class="filename">script.php</var> ci-dessus avec
   la configuration d&#039;<a href="ini.sect.safe-mode.php#ini.open-basedir" class="link">open_basedir</a>,
   le résultat sera l&#039;affichage suivant :
   <div class="example-contents screen">
<div class="cdata"><pre>
Warning: open_basedir restriction in effect. File is in wrong directory in
/docroot/script.php on line 2
</pre></div>
   </div>
  </p>
  <p class="para">
   Vous pouvez également désactiver les fonctions particulières. Notez que
   la directive <a href="ini.sect.safe-mode.php#ini.disable-functions" class="link">disable_functions</a>
   ne peut être utilisée en dehors du fichier <var class="filename">php.ini</var>, ce qui signifie
   que vous ne pouvez pas désactiver des fonctions par virtualhost ou par
   dossiers, dans votre fichier <var class="filename">httpd.conf</var>. Si nous ajoutons ceci à notre
   fichier <var class="filename">php.ini</var> :
   </p><div class="example-contents programlisting">
<div class="inicode"><pre class="inicode">disable_functions = readfile,system</pre>
</div>
   </div>
<p>
   toute utilisation des fonctions <a href="function.readfile.php" class="function">readfile()</a> et
   <a href="function.system.php" class="function">system()</a> générera l&#039;affichage suivant :
   <div class="example-contents screen">
<div class="cdata"><pre>
Warning: readfile() has been disabled for security reasons in
/docroot/script.php on line 2
</pre></div>
   </div>
  </p>
  <div class="warning"><b class="warning">Avertissement</b>
   <p class="para">
    Ces restrictions de PHP sont bien sûr invalides en exécution binaire.
   </p>
  </div>
 </div><?php manual_footer(); ?>
 
show source | credits | sitemap | contact | advertising | mirror sites