Problème d'antislash sur données POST PHP
De Wiki PC, Wiki Informatique.
Sommaire |
Description du problème :
J'utilise la méthode POST de PHP afin de passer des variables d'un script à un autre dans une application PHP.
Seulement des antislashs s'ajoutent automatiquement dans mes variables POST, exemple si j'envoie ceci :
\serveur\document
Alors la variable $_POST['donnees'] aura la valeur :
\\serveur\\document
Solution(s) proposée(s) :
Ce "problème" vient du fait que les magic_quotes_runtime() sont activés sur ton serveur, ainsi il rajoute automatiquement des "\" devant les caractères à échapper (',",\) dans les variables $_GET et $_POST (les magic_quotes_gpc, eux, rajoutent des "\" dans les noms des fichiers).
Désactiver les magic_quotes() via PHP
Les magic_quotes_runtime , pour les fichiers, peuvent être désactivées avec la fonction suivante :
set_magic_quotes_runtime(0) ;
Cependant les magic_quotes_gpc n'ont pas de fonction pour les désactiver, il faut donc en créer une :
function remove_magic_quotes(&$array) { foreach($array as $key => $val) { if(is_array($val)) { remove_magic_quotes($array[$key]); elseif(is_string($val)){ $array[$key] = stripslashes($val); } }
Il suffit ensuite de l'appeler en début de script :
if(magic_quotes_gpc() == 1) { remove_magic_quotes($_POST); remove_magic_quotes($_GET); remove_magic_quotes($_REQUEST); remove_magic_quotes($_SERVER); remove_magic_quotes($_FILES); remove_magic_quotes($_COOKIE); }
Désactiver les magic_quotes() via php.ini
Si l'hébergement permet de modifier le php.ini, il faut trouver la ligne :
; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On
Et la remplacer par :
; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = Off
Pour les magic_quotes_runtime (si vous voulez les désactiver par la même occasion) :
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off
Désactiver les magic_quotes() via .htaccess
La plupart des hébergements mutualisés ne permettent pas de modifier le php.ini mais permettent d'utiliser un .htaccess avec un php_flag :
php_flag magic_quotes_gpc off
Et pour les magic_quotes_runtime (si vous voulez les désactiver par la même occasion) :
php_flag magic_quotes_runtime off
Solution(s) déjà testée(s) / retenue(s) comme fonctionnelle(s) :
Désactiver les magic_quotes_gpc par l'une des méthodes citées.
Informations annexes :
Attention ! Si vous désactivez les magic_quotes_gpc() pensez à effectuer un mysql_real_escape_string() sur toutes les données GET et POST que vous insérerez dans votre base de données afin de vous protéger contre les insertions SQL !