Page 1 sur 2

magic_quotes_gpc et htaccess

Posté : 08 juin 2009, 14:57
par Neomcdn
Bonjour à tous!

Habitués à Infomaniak, nous avons toujours eu par défaut dans notre php.ini des magic_quotes_gpc = off. Nous utilisions donc des fonctions mysql_real_escape_string pour protéger les quotes.

Nous sommes en trains d'essayer Ophos qui par défaut place les magic_quotes_gpc à ON; ce qui nous donne des phrases du type :
Ceci est une phrase de test que j\\\\\\\\\'essaie de tester
J'ai donc essayé de régler cet élément sur off via htaccess avec

Code : Tout sélectionner

magic_quotes_gpc = Off
Mais là j'ai le droit à une erreur 500...

Savez-vous quelle est est la solution?

Merci par avance

Cordialement,

@+!

Neomcdn

Posté : 08 juin 2009, 15:03
par AB
Essaies plutôt : php_flag magic_quotes_gpc off

Erreur 500

Posté : 08 juin 2009, 15:43
par Neomcdn
Salut AB et merci pour ta réponse.

Je viens de tester et j'ai toujours l'erreur :

http://www.parcs-jardins.fr/

Le .htaccess placé à la racine contient :

php_flag magic_quotes_gpc off

Est-ce suffisant ?

Posté : 08 juin 2009, 16:11
par AB
Apparemment ton serveur n'accepte pas les configurations via .htaccess (c'est assez fréquent)

Il te reste à modifier tes pages pour inclure par exemple :
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);
}
Ainsi tu retrouveras l'équivalent de ton ancienne config et tu n'auras pas besoin de retirer ces lignes si tu retrouve un serveur avec magic_quotes_gpc sur off

Posté : 08 juin 2009, 16:34
par Neomcdn
Je trouve çà bizarre que ce ne soit pas autorisé.

Il y a ici une liste des choses permises :

http://www.ophos.com/hebergement/faq-as ... info5.html

et il est indique '--enable-magic-quotes'

Et là, ils précisent que le htaccess est autorisé...

http://www.ophos.com/hebergement/faq-as ... CCESS.html

Qu'en penses-tu?

Posté : 08 juin 2009, 17:12
par AB
Le premier lien que tu donne indique la configuration serveur et que magic quote est activé (mais pas que tu peux le modifier).

Le deuxième lien indique que tu peux créer des .htaccess . Mais le serveur peut prendre en compte certaines règles inclues dans le .htacces et en refuser certaines autres. La plupart du temps ils autorisent les redirections, les réécritures et les règles de restriction mais cela se limite là.
Ce serait d'ailleurs assez cohérent avec la configuration php puisque je vois que ini_set est désactivé.

C'est le cas de la très grande majorité des mutualisés, mais tu peux toujours contacter ton hébergeur pour en être certain.

Posté : 08 juin 2009, 17:17
par AB
La doc ici http://fr2.php.net/manual/fr/security.m ... abling.php (j'ai modifié mon avant dernier post pour indiquer la fonction de l'exemple 2).

Posté : 08 juin 2009, 17:41
par Neomcdn
Merci!

çà semblait fonctionner avec

Code : Tout sélectionner

<?php if (get_magic_quotes_gpc()) { $_POST = array_map('stripslashes',$_POST); $_GET = array_map('stripslashes',$_GET); $_COOKIE = array_map('stripslashes',$_COOKIE); } ?>
Il faut mieux que j'utilise le second?

Code : Tout sélectionner

<?php if (get_magic_quotes_gpc()) { $_POST = array_map('stripslashes',$_POST); $_GET = array_map('stripslashes',$_GET); $_COOKIE = array_map('stripslashes',$_COOKIE); } ?>
Merci pour ton aide!

@+!

Posté : 08 juin 2009, 20:56
par AB
Oui mais le code ci-dessus ne fonctionne que pour les tableaux uni dimensionnels. C'est pour cela que j'ai édité mon précédent post pour indiquer un code (cf ci-dessous) qui fonctionne même pour les tableaux multi dimensionnels (c'est l'exemple 2 du manuel).
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);
} 

Posté : 08 juin 2009, 22:49
par AB
Ou là décidément cette page du manuel est buguée.

Dans le cas où les clés des tableaux possèdent des quotes (cas relativement rare, mais bon...), les clés ne seront pas traitées avec la fonction donnée dans l'exemple 2.

Plus bas dans cette page, plusieurs lecteurs mentionnent ce problème dont un qui propose une solution (17-Dec-2006 08:20). Mais la fonction proposée n'est pas parfaite non plus puisqu'elle ignore les clés de premier niveau!

Je vais donc tenter de simplifier cette dernière fonction pour qu'elle fonctionne dans tous les cas :
if (get_magic_quotes_gpc()) {
    function undoMagicQuotes($array) {
	
        $newArray = array();
		
        foreach($array as $key => $value) 
			{

				$key = stripslashes($key);

				if (is_array($value)) 
				{
					$newArray[$key] = undoMagicQuotes($value);
				}
				else 
				{
					$newArray[$key] = stripslashes($value);
				}
        	}
        return $newArray;
    }
    $_GET = undoMagicQuotes($_GET);
    $_POST = undoMagicQuotes($_POST);
    $_COOKIE = undoMagicQuotes($_COOKIE);
    $_REQUEST = undoMagicQuotes($_REQUEST);
}

Posté : 09 juin 2009, 10:32
par Neomcdn
Merci pour ton aide!

J'essaie ce code!

@+!

Re: magic_quotes_gpc et htaccess

Posté : 27 févr. 2012, 16:42
par stephrav
Depuis la parution de PHP 5, les concepteurs et distributeurs du langage semblent renoncer à cet échappement automatique. Le problème est de risquer de se trouver dans une situation où certain serveurs pratiquent l’échappement et d’autres non.
Le seul moyen pour régler le problème une fois pour toutes et de normaliser systématiquement les données HTTP.
Personnellement, je préfères tester, à l’entrée de tout script, si le mode d’échappement automatique est activé. Si oui, on supprime cet échappement, pour toutes les chaînes transmises, avec la fonction stripSlashes(). On peut alors considérer par la suite que les données HTTP sont représentées normalement, comme n’importe quelle autre chaîne de caractères manipulée dans le script.

Voici la fonction qui effectue cette opération sur chacun des tableaux contenant d’une part des données transmises en mode get ou post, d’autre part des cookies.
// Application de la suppression des échappements, si nécessaire, dans tous les tableaux contenant les données HTTP
function Normalisation( )
{
   // Dans le cas ou l'on est en échappement automatique, on rectifie
   if(get_magic_quotes_gpc ( ) ) 
   {
                $_POST = NormalisationHTTP($_POST) ;
                $_GET = NormalisationHTTP($_GET) ;
                $_REQUEST = NormalisationHTTP($_REQUEST) ;
                $_COOKIE = NormalisationHTTP($_COOKIE) ;
  }
}

// Puis la fonction de suppression des échappements automatique des données HTTP dans un tableau de quelconque dimension
function NormalisationHTTP($tableau)
{
   // Parcours du tableau
   foreach ($tableau as $cle => $valeur)
   {
       if(!is_array($valeur) )  // C'est un élément, on agît
        {
            $tableau[$cle] = stripSlashes($valeur) ;
        } else // c'est un tableau, on appelle récursivement
        { $tableau[$cle] = NormalisationHTTP($valeur) ; }
   }
return $tableau;
}
Bien évidement, je ne sorts pas cela d'une marmite. Je vous recommande donc vivement le livre de Philippe Rigaux : Pratique de MySQL et PHP qui est particulièrement bien structuré et méthodique.

Re: magic_quotes_gpc et htaccess

Posté : 27 févr. 2012, 18:22
par moogli
3 ans après c'est un peu tard :mrgreen:

Re: magic_quotes_gpc et htaccess

Posté : 27 févr. 2012, 23:23
par Calimero
3 ans après c'est un peu tard :mrgreen:
On peut quand même rajouter cet extrait du changelog de la dernière RC de php :

Code : Tout sélectionner

- Removed features: . Removed magic_quotes_gpc, magic_quotes_runtime and magic_quotes_sybase ini options. get_magic_quotes_gpc, get_magic_quotes_runtime are kept but always return false, set_magic_quotes_runtime raises an E_CORE_ERROR. (Pierrick, Pierre)
Cela veut dire que les magic_quotes et les problèmes qui vont avec seront définitivement oubliés à partir de php 5.4 (final).

Re: magic_quotes_gpc et htaccess

Posté : 02 mars 2012, 21:18
par AB
Oui ce qui sous entend que de nombreux hébergeurs vont certainement patienter longtemps avant de proposer php 5.4 (pour compatibilité avec de vieux scripts)... notamment ceux qui ne proposent qu'une version de php dans leur offre.