mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-04-27 02:28:31 +02:00
a8b115ab66
# Please use: php configure.php --with-lang=fr in the future git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@277868 c90b9560-bf6c-de11-be94-00142212c4b1
256 lines
8.9 KiB
XML
256 lines
8.9 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision: 1.20 $ -->
|
|
<!-- EN-Revision: 1.13 Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
|
|
<chapter xml:id="security.magicquotes" xmlns="http://docbook.org/ns/docbook">
|
|
<title>Guillemets magiques</title>
|
|
&warn.deprecated.feature-5-3-0.removed-6-0-0;
|
|
<para>
|
|
Les guillemets magiques (littéralement, les <literal>Magic Quotes</literal>)
|
|
est un processus qui protège automagiquement les données introduites dans
|
|
un script PHP. Il est recommandé de développer les applications sans
|
|
l'aide des guillemets magiques, et de protéger manuellement les données.
|
|
</para>
|
|
|
|
<sect1 xml:id="security.magicquotes.what">
|
|
<title>Qu'est-ce que les guillemets magiques?</title>
|
|
<para>
|
|
Lorsque cette directive est active, les guillemets simples
|
|
<literal>'</literal>, les guillemets doubles <literal>"</literal>,
|
|
les antislashs <literal>\</literal> et les caractères nul
|
|
<literal>NULL</literal> sont protégés automatiquement avec un antislash.
|
|
C'est le même résultat que celui de la fonction
|
|
<function>addslashes</function>.
|
|
</para>
|
|
<para>
|
|
Il y a trois directives de guillemets magiques différentes :
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
<link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link>
|
|
</simpara>
|
|
<simpara>
|
|
Affecte les données issues des requêtes HTTP (GET, POST, et COOKIE). Ne
|
|
peut pas être configurée durant l'exécution, et vaut par défaut
|
|
<emphasis>on</emphasis> en PHP.
|
|
</simpara>
|
|
<simpara>
|
|
Voir aussi <function>get_magic_quotes_gpc</function>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<link linkend="ini.magic-quotes-runtime">magic_quotes_runtime</link>
|
|
</simpara>
|
|
<simpara>
|
|
Si activée, la plupart des fonctions qui retournent des données
|
|
externes, y compris issues d'une base de données ou d'un fichier
|
|
texte, verront les données protégées par des antislashs. Cette
|
|
directive peut être modifiée durant l'exécution, et vaut par
|
|
défaut <emphasis>off</emphasis> en PHP
|
|
</simpara>
|
|
<simpara>
|
|
Voir aussi <function>set_magic_quotes_runtime</function> et
|
|
<function>get_magic_quotes_runtime</function>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<link linkend="ini.magic-quotes-sybase">magic_quotes_sybase</link>
|
|
</simpara>
|
|
<simpara>
|
|
Si cette configuration est active, les guillemets simples sont
|
|
protégés avec un autre guillemets simples, et non pas un antislash.
|
|
Lorsqu'elle est active, cette directive remplace entièrement
|
|
<link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link>.
|
|
Si vous activez ces deux directives, alors seuls les guillemets
|
|
simples seront protégés, avec <literal>''</literal>. Les guillemets
|
|
doubles, les antislashs et les caractères nul seront laissés intacts.
|
|
</simpara>
|
|
<simpara>
|
|
Voir aussi <function>ini_get</function> pour lire la valeur de la
|
|
directive.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="security.magicquotes.why">
|
|
<title>Pourquoi utiliser les guillemets magiques?</title>
|
|
&warn.deprecated.feature-5-3-0.removed-6-0-0;
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Il n'y a aucune raison d'utiliser les guillemets magiques,
|
|
car ils ne sont plus supportés en PHP. Cependant, ils ont
|
|
existés, et ont aidé quelques débutants, en le permettant de
|
|
produire, sans le savoir et involontairement, du code plus
|
|
sécuritaire. Lorsque vous tombez sur des scripts qui s'appuient
|
|
sur ce type de comportements, il est recommandé de modifier
|
|
ce code et de désactiver les guillemets magiques.
|
|
</simpara>
|
|
<simpara>
|
|
Pour quelles raisons cette fonctionnalité est apparue? Simplement
|
|
pour se protéger des
|
|
<link linkend="security.database.sql-injection">injections SQL</link>.
|
|
Aujourd'hui, les développeurs sont plus conscients des problèmes
|
|
de sécurité, et adoptent les mécanismes de protections de leur
|
|
base de données, ou les commandes préparées, au lieu de passer
|
|
par les guillemets magiques.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="security.magicquotes.whynot">
|
|
<title>Pourquoi ne pas utiliser les guillemets magiques?</title>
|
|
&warn.deprecated.feature-5-3-0.removed-6-0-0;
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Portabilité
|
|
</simpara>
|
|
<simpara>
|
|
Cette directive peut être activée ou désactivée suivant
|
|
les serveurs et cela affecte grandement la portabilité. Utilisez
|
|
<function>get_magic_quotes_gpc</function> pour vérifier s'ils sont
|
|
actifs ou pas, et adaptez votre application.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Performances
|
|
</simpara>
|
|
<simpara>
|
|
Comme ce n'est pas toutes les données qui sont finalement placées
|
|
dans une base, il y a un coût en vitesse pour protéger toutes ces
|
|
données. Le simple appel des fonctions de protections en fonction
|
|
des besoins est plus efficace (<function>addslashes</function>).
|
|
</simpara>
|
|
<simpara>
|
|
Même si <filename>php.ini-dist</filename> active ces options par défaut,
|
|
<filename>php.ini-recommended</filename> les désactive.
|
|
Cette recommandation est surtout faite pour des raisons de vitesse.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Peu pratique
|
|
</simpara>
|
|
<simpara>
|
|
Comme toutes les données n'ont pas forcément besoin de protection,
|
|
il est souvent désagréable de voir des données protégées là où ça ne
|
|
sert à rien. Par exemple, lorsque vous envoyez par mail un formulaire,
|
|
et que vous voyez des antislashs parsemer le message. Pour corriger
|
|
cela, il faut faire un usage fréquent de
|
|
<function>stripslashes</function>.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="security.magicquotes.disabling">
|
|
<title>Désactiver les guillemets magiques</title>
|
|
&warn.deprecated.feature-5-3-0.removed-6-0-0;
|
|
<para>
|
|
La directive <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link>
|
|
ne peut être désactivée qu'au niveau du système, et non pas à l'exécution.
|
|
En d'autres termes, utiliser <function>ini_set</function> n'est pas
|
|
possible.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Désactiver les guillemets magiques du coté du serveur</title>
|
|
<para>
|
|
Voici un exemple qui donne la valeur de Off à ces directives dans
|
|
le fichier &php.ini;. Pour plus de détails, voyez la section
|
|
<link linkend="configuration.changes">Comment changer la
|
|
configuration</link>.
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
; Magic quotes
|
|
;
|
|
|
|
; Magic quotes for incoming GET/POST/Cookie data.
|
|
magic_quotes_gpc = Off
|
|
|
|
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
|
|
magic_quotes_runtime = Off
|
|
|
|
; Use Sybase-style magic quotes (escape ' with '' instead of \').
|
|
magic_quotes_sybase = Off
|
|
]]>
|
|
</screen>
|
|
<para>
|
|
Si vous n'avez pas accès au serveur, utilisez le fichier
|
|
<filename>.htaccess</filename>. Par exemple :
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
php_flag magic_quotes_gpc Off
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Afin d'écrire du code portable sur tous les environnement, et où vous ne
|
|
pourrez pas forcément modifier la configuration du serveur, voici un
|
|
exemple de désactivation de
|
|
<link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> à l'exécution.
|
|
Cette méthode est inefficace, et il est recommandé d'utiliser les
|
|
autres solutions si possible.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Désactivation des guillemets magiques à l'exécution</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (get_magic_quotes_gpc()) {
|
|
function stripslashes_deep($value)
|
|
{
|
|
$value = is_array($value) ?
|
|
array_map('stripslashes_deep', $value) :
|
|
stripslashes($value);
|
|
|
|
return $value;
|
|
}
|
|
|
|
$_POST = array_map('stripslashes_deep', $_POST);
|
|
$_GET = array_map('stripslashes_deep', $_GET);
|
|
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
|
|
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</sect1>
|
|
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|