Question Magic quotes

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 : Question Magic quotes

par AB » 02 mai 2008, 17:52

Je ressort mon vieux topic car je fait quelques test sur Wamp, MGQ désactivées.

Donc si j'ai bien suivis pour sécuriser au mieux :

- Si les MGQ sont activées, pas de problèmes
- Si elles ne le sont pas on ajoute des slashs... a chaque fois qu'ont fait un insert et aussi à chaques fois que l'on affiche une variable pour éviter une erreur si celle-ci contient par exemple un ' ?

donc, ça c'est juste ? :
function AjouterQuotes( $chaine )
{
	if ( get_magic_quotes_gpc() )
	{
		$chaine = $chaine;
	}
	else
	{
		$chaine = addslashes( $chaine);
	}
	return $chaine;
}
Si c'est ce que tu veux faire, tu peux faire plus simple
function AjouterQuotes( $chaine )
{
	if ( !get_magic_quotes_gpc() ) $chaine = addslashes( $chaine);
	
	return $chaine;
}

Maintenant si c'est pour insérer ta chaine dans une requête SQL, il est très recommandé d'utiliser la fonction mysql_real_escape_string() à la place d'utiliser les addslashes.

Dans ce cas là il faut donc faire l'inverse, c'est à dire supprimer les \ si get_magic_quotes_gpc() est activé et ensuite appliquer la fonction mysql_real_escape_string()
function PrepareSql ($chaine) {

$chaine = (get_magic_quotes_gpc())? mysql_real_escape_string(stripslashes($chaine)) : mysql_real_escape_string($chaine));

return $chaine;
}
Note qu'il faudra appliquer cette fonction après avoir établi une connexion (cf doc mysql_real_escape_string())

par supercanard » 01 mai 2008, 10:29

Je ressort mon vieux topic car je fait quelques test sur Wamp, MGQ désactivées.

Donc si j'ai bien suivis pour sécuriser au mieux :

- Si les MGQ sont activées, pas de problèmes
- Si elles ne le sont pas on ajoute des slashs... a chaque fois qu'ont fait un insert et aussi à chaques fois que l'on affiche une variable pour éviter une erreur si celle-ci contient par exemple un ' ?

donc, ça c'est juste ? :
function AjouterQuotes( $chaine )
{
	if ( get_magic_quotes_gpc() )
	{
		$chaine = $chaine;
	}
	else
	{
		$chaine = addslashes( $chaine);
	}
	return $chaine;
}

par Ryle » 19 févr. 2008, 09:22

Ca dépend de ce que contiennent tes variables :)

Le but de l'échappement d'un caractère (quel qu'il soit) est d'informer le script que dans la chaine concernée, celui-ci doit être considéré comme le caractère qu'il représente et non comme une instruction spéciale.

Les chaines " l'apostrophe " et ' l\'apostrophe ' sont rigoureusement identiques. L'échappement permet ici de dire à php que mon apostrophes est bien le caractère apostrophe et pas la fin de la chaine.

Le but des magic quotes est principallement destiné à te faciliter l'insertion de ta variable dans une requête sql qui n'est rien de plus qu'une chaine de caractère. Donc pour que sql ne soit pas perturbé et que ta requête ne soit pas erronée, magic quotes protège apostrophe et guillemets. En effet les requêtes :
INSERT INTO ... VALUES ( ' l'apostrophe ' );
et
INSERT INTO ... VALUES ( ' l\'apostrophe ' );
Ne sont pas les même, la première tentera d'insérer la valeur ' l', et génèrera une erreur sur l'instruction "apostrophe ' " (commande non reconnue, etc.), tandis que la seconde sera enregistrée correctement.

Le but d'un addslashes ou des magic quotes est donc principallement destiné à protéger une valeur lorsque tu utilises celle-ci dans une chaine (sql, javascript, etc.)

par supercanard » 18 févr. 2008, 23:27

Y a pas grand chose à éclairer, c'est logique, c'est tout :)

Ce qu'il te manque peut etre c'est la fonction get_magic_quotes_gpc() qui te permet de savoir si oui ou non les magic quotes sont activées et ainsi savoir s'il te faut ou pas ajouter un addslashes() :)
$chaine = (get_magic_quotes_gpc() == 1) ? $chaine : addslashes($chaine);
(voir la faq si tu ne connais pas l'opérateur ternaire et la syntaxe " () ? : " )
Snif, toute cette ligne de code a faire à chaque fois =/
Si je fait ça en appelant une fonction ça sera un peu plus court à la limite.

Question bête, si je n'échappe pas les caractères (que j'ai un apostrophe dans ma chaine) et que les MQ sont désactivés ça va me faire une erreur lors d'un test simple comme ici ?
if ( $_POST['identifiant'] == $identifiant_administration )

par Ryle » 18 févr. 2008, 22:28

Y a pas grand chose à éclairer, c'est logique, c'est tout :)

Ce qu'il te manque peut etre c'est la fonction get_magic_quotes_gpc() qui te permet de savoir si oui ou non les magic quotes sont activées et ainsi savoir s'il te faut ou pas ajouter un addslashes() :)
$chaine = (get_magic_quotes_gpc() == 1) ? $chaine : addslashes($chaine);
(voir la faq si tu ne connais pas l'opérateur ternaire et la syntaxe " () ? : " )

Question Magic quotes

par supercanard » 18 févr. 2008, 21:47

Bonjour,

Je ne comprend pas quelquechose :

JE m'étais dit que prendre l'habitude de mettre des addslashes partout était bien, comme ça au cas ou j'utilise mes script sur un serveur qui n'a pas activé les magic quotes ils marcheraient.

Sauf que maintenant sur un serveur avec les magic quotes activées ça fou le bazar puisque un slash est ajouté à mes chaines automatiquement et une autre est ajouté avec mon addslahes.
Je me retrouve donc avec 2 slahs...

Voilà si quelqun peut m'éclairer :D