Files
doc-fr/security/magicquotes.xml
T
Philip Olson a8b115ab66 Fixed build.
# 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
2009-03-27 09:17:57 +00:00

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
-->