magic_quotes_gpc et htaccess

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : magic_quotes_gpc et htaccess

Re: magic_quotes_gpc et htaccess

par moogli » 02 mars 2012, 21:33

nombreux hébergeurs vont certainement patienter longtemps avant de proposer php 5.4
le mien propose encore php4.4, même si 5.2 se généralise, bon y a une 5.4 RC8 de dispo mais pas de 5.3 :s

Re: magic_quotes_gpc et htaccess

par AB » 02 mars 2012, 21:18

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.

Re: magic_quotes_gpc et htaccess

par Calimero » 27 févr. 2012, 23:23

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

par moogli » 27 févr. 2012, 18:22

3 ans après c'est un peu tard :mrgreen:

Re: magic_quotes_gpc et htaccess

par stephrav » 27 févr. 2012, 16:42

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.

par Neomcdn » 09 juin 2009, 10:32

Merci pour ton aide!

J'essaie ce code!

@+!

par AB » 08 juin 2009, 22:49

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);
}

par AB » 08 juin 2009, 20:56

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);
} 

par Neomcdn » 08 juin 2009, 17:41

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!

@+!

par AB » 08 juin 2009, 17:17

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

par AB » 08 juin 2009, 17:12

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.

par Neomcdn » 08 juin 2009, 16:34

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?

par AB » 08 juin 2009, 16:11

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

Erreur 500

par Neomcdn » 08 juin 2009, 15:43

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 ?

par AB » 08 juin 2009, 15:03

Essaies plutôt : php_flag magic_quotes_gpc off