pb de magic_quotes_gpc

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 : pb de magic_quotes_gpc

Re: pb de magic_quotes_gpc

par AB » 15 oct. 2010, 19:25

OK, merci, j'en conclue que les magic quotes n'interviennent que sur de la passation de données (GET, POST, COOKIE) et pas sur du stockage en base...
En définitive je supprimer le test que j'avais fait dans mon code avant l'UDATE SQL (pour savoir si magic quotes est à on ou off), et j'applique mysq_real_escape_string() dans tous les cas.

Merci bien !

++
Non ne supprime pas ce test, car si magic quotes_gpc est actif, vu que cela concerne également les $_POST tu auras des slashes en trop.

Pour que ton code passe partout (magic quotes_gpc actif ou non) tu peux utiliser une fonction qui supprimera si besoin les slashes

Typiquement :
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
}


$ville = Verif_magicquotes($_POST['ville']);

//$var = Verif_magicquotes($_POST['var']);

$query = "SELECT * FROM article WHERE ville='".mysql_real_escape_string($ville)."'";

$req = mysql_query($query) or die (mysql_error());

Re: pb de magic_quotes_gpc

par moogli » 15 oct. 2010, 17:47

il n'y a rien avant insertion, hormis le magic_quote_gpc car tes données proviennent d'un formulaire.

donc la le truc se serait plutot de faire un stripslashes si magic_quote_gpc = on ;)

@+

Re: pb de magic_quotes_gpc

par Z » 15 oct. 2010, 17:10

OK, merci, j'en conclue que les magic quotes n'interviennent que sur de la passation de données (GET, POST, COOKIE) et pas sur du stockage en base...
En définitive je supprimer le test que j'avais fait dans mon code avant l'UDATE SQL (pour savoir si magic quotes est à on ou off), et j'applique mysq_real_escape_string() dans tous les cas.

Merci bien !

++

Re: pb de magic_quotes_gpc

par moogli » 15 oct. 2010, 16:51

magic_quote_GPC pour GET POST COOKIE

la doc pour les guillemets magique http://www.php.net/manual/fr/security.magicquotes.php (le premier réponde, je pense à ta question)

@+

Re: pb de magic_quotes_gpc

par Z » 15 oct. 2010, 13:34

Bon, personne ? :-(

J'ai cherché à quoi servait ce mode magic quotes, et j'ai trouvé : "Permet d'echaper par un anti-slash, toutes les quotes ( ' , " ) par sécurité. "
Ce que je ne constate pas...

Merci de vos lumière !!

++ !
Z

Re: pb de magic_quotes_gpc

par Z » 15 oct. 2010, 10:49

Cool merci pour cet explication sur les 2 fonctions, mais j'ai peut-être mal posé ma question, je vais essayer autrement :-)

Est-ce que la directive du php.ini "magic_quotes_gpc" se charge, quand elle est à "on", d'échapper les caractères qui ne nécessitent, un peu comme le fait mysql_real_escape_string() ?

Si non, que fait ce mode "magic_quotes_gpc" quand il est activé ?

Outre le fait qu'il soit déprécié d'après la doc, j'aimerais comprendre son utilité, car chez notre hébergeur, il est utilisé.

Merci !!

++
Z

Re: pb de magic_quotes_gpc

par moogli » 15 oct. 2010, 10:37

salut,

pour addslashes la doc nous dit
Retourne la chaîne str, après avoir échappé tous les caractères qui doivent l'être, pour être utilisée dans une requête de base de données.
Ces caractères sont les guillemets simples ('), guillemets doubles ("), antislash (\) et NUL (le caractère NULL).
pour mysql_real_escape_string
mysql_real_escape_string() appelle la fonction mysql_escape_string() de la bibliothèque MySQL qui ajoute un slash aux caractères suivants :
NULL, \x00, \n, \r, \, ', " et \x1a.
voila la différence entre les deux.

d’ailleurs la doc indique aussi
Il est fortement recommandé d'utiliser les fonctions de protection spécifiques à chaque base de données (telle que mysqli_real_escape_string() pour MySQL et pg_escape_string() pour PostGreSQL), mais si la base de données que vous utilisez n'a pas de fonction spécifique, et que cette base utilise \ pour protéger les caractères spéciaux, vous pouvez utiliser cette fonction. Grâce à elle, \ sera ajouté.

Avec mysql_real_escape_string() la "protection" des chaine est correcte et ne laisse pas passer certain caractère pouvant induire une erreur dans la requête (erreur dans le sens où elle ne sera pas celle prévu pas le développeur).

Comme l'indique jojolapine, les magic_quote ne sont gênante qu'a l'affichage, car dans ce cas php rajoute des \ devant ' et " ce qui est gênant, il faudra utilise stripslashes dans ce cas :)

@+

Re: pb de magic_quotes_gpc

par Z » 15 oct. 2010, 10:23

Bonjour,

OK, donc je remplace addslash par mysq_real_escape_string() Merci de l'info.

Mais je ne comprends pas pourquoi les magic quotes étant à "on" nous oblige quand-même à échapper les caractères spéciaux à la main ? Quelqu'un peut m'expliquer ?

Merci !

Z

Re: pb de magic_quotes_gpc

par jojolapine » 14 oct. 2010, 23:59

Et si tu utilisais les fonctions adéquates afin de protéger une chaine de caractère insérée au sein d'une requête?
=> mysq_real_escape_string() ;)
Ensuite, magic_quotes ou pas, c'est effectivement quelque chose à gérer, mais ça ne devrait avoir d'incidence que sur l'affichage, et pas sûr l'enregistrement de tes données ;)

pb de magic_quotes_gpc

par Z » 14 oct. 2010, 23:08

Bonjour tout le monde !

Dans uns script qui effectue une modif dans une base de données à partir du post d'un formulaire, je fais la chose suivante :
- un test pour savoir si les magic_quotes sont à on ou à off
- si off, j'échappe d'éventuelles apostrophes avec addslashes, et si on, j'envoie la modif sur les valeurs tels quelles.
Ca donne ceci :
if (isset($_POST["envoyer"])) {

		if (!get_magic_quotes_gpc()) {
			$nomdept = addslashes($dept[$_POST["dept"]]);
			$_POST["nom"] = addslashes($_POST["nom"]);
			$_POST["zone"] = addslashes($_POST["zone"]);

		} else {
			$nomdept = $dept[$_POST["dept"]];
		}

		$reqmodif = "UPDATE ".$table." SET
		`nom` = '".$_POST["nom"]."',
		`nomdpt` = '".$nomdept."',
		`zone` = '".$_POST["zone"]."',
		WHERE `num` = ".$nsel;
}
En local ça marche très bien, mes magic quotes sont à off, donc tout est échappé à la main.
Par contre chez mon hébergeur, magic quotes est à On. Pourtant, l'échappement automatique qui devrait avoir lieu ne se fait pas.
Du coup, sur toutes les chaînes de caractères avec des apostrophes, forcément, ça marche pas....
J'ai essayé de mettre un ini_set('magic_quotes_gpc', 'Off'); pour forcer le passage par addslash, ça ne marche pas mieux...
Quelqu'un aurait une idée ?

Merci !!
Z