Problème d'antislash sur données POST PHP

De Wiki PC, Wiki Informatique.

Version du 9 septembre 2011 à 09:19 par Troll (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

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 !

Outils personnels