Aller au contenu

Échappement automatique des guillemets


Sujets conseillés

Posté (modifié)

Bonsoir,

J'ai l'impression que lors de la soummision de mes formulaires, le serveur échappe automatiquement les guillemets.

Il y a moyen de l'empâcher de le faire ?

Je trouve pas à quoi ca correspond dans la configuration du serveur.

Modifié par petit-ourson
Posté

Bonsoir,

cela peut provenir de "MagicQuote", personnellement je n'aime pas trop travailler avec..

get_magic_quotes_gpc() retourne la configuration actuelle de l'option magic_quotes_gpc  (0 pour l'option désactivée, 1 pour l'option activée).

    Note : Si la directive magic_quotes_sybase est activée, elle remplacera complètement magic_quotes_gpc. Ce qui fait que même si get_magic_quotes() retourne TRUE les guillemets doubles, les anti-slashes ou les caractères NULL ne seront pas protégés. Seul les guillemets simples le seront. Dans ce cas, ils ressembleront à ''.

Source : http://www.php.net/get_magic_quotes_gpc

Si cette fonction te renvoie la valeur "true", tu peux éventuellement essayer de désactiver cette fonctionnalité avec un fichier .htacces et la ligne suivante :

php_flag magic_quotes_gpc off

Sinon tu peux toujours essayer d'apprendre à utiliser cette fonctionnalité, mais il y a quelques subtilités... à toi de voir : http://www.php.net/manual/fr/security.magicquotes.php

Posté

L'echappement des guillemets est une mesure préventive. C'est tout simplement pour restreindre les risques de hack de ton serveur.

Apprends à t'en servir plutot que de chercher à les désactiver, tu auras tout à y gagner.

Posté

Ou sinon tu peut exécuter cette fonction au début de ta page afin de supprimer l'échappement des tableaux $_POST et $_GET si get_magic_quotes_gpc() est activé :

function supprMagicQuotes() {
 if (get_magic_quotes_gpc()) {
  foreach($_POST as $i=>$var) $_POST[$i]=stripslashes($var);
  foreach($_GET as $i=>$var) $_GET[$i]=stripslashes($var);
 }
}

ou, dans l'autre sens, si il est désactivé tu peut échapper les paramètres en conséquence :

function addMagicQuotes() {
 if (!get_magic_quotes_gpc()) {
  foreach($_POST as $i=>$var) $_POST[$i]=addslashes($var);
  foreach($_GET as $i=>$var) $_GET[$i]=addslashes($var);
 }
}

De cette façon tu aura toujours la même chose en sortie, quelque soit la configuration du serveur.

Posté

hum ouaip. Le probleme c'est que je me retrouve dans ma base de données avec des double echapement car mon script etait fait sans cette option donc c'est assez embetant.

J'ai modifié le script et j'échappe si la fonction est désactivé sinon non ;o)

Enfin Merci ;o)

Posté (modifié)

Yep... de rien, mais pour Anonymus (bien qu'il doit sûrement déjà le savoir) il n'y a pas que des avantages en utilisant magic quote.

La portabilité du code devient très limitée à mon avis lorsque tu utilises les magic_quotes... mais pour une petite application c'est pas le facteur le plus important...

Modifié par TheRec
Posté

Non !

Si tu travailles avec les magic quotes désactivés, je te conseille de les activer. Ce que tu peux faire, c'est les activer sur ton serveur local pour avoir une config. identique à un serveur, voire ajouter la 2e fonction donnée par Petit Ourson.

Perso, soit je travaille avec les quotes auto. activés, soit je suis obligé d'échapper toute saisie d'utilisateur. Quand c'est automatique, c'est mieux ;)

Et quand c'est le serveur qui s'en charge, on risque pas d'en oublier :D

Posté

bah moi c'est une petite appli ... qui tourne sur deux sites ... et dont j'ai aps accès a la configuration ;o)

Enfin bon je sais d'où ça vient, je vais agir en conséquence.

Posté

Oui..c'est superbe les automatismes, je n'ai rien contre...sauf quand cela nuit à la portabilité du script et ce n'est pas quelque chose de négligeable en programmation à mon avis...et sûrement celui de beaucoup de développeurs...

Un peu de lecture sur ce sujet : http://www.phpfrance.com/tutoriaux/index.p...es-magic-quotes

Section "5- Pourquoi ne pas utiliser les magic quotes ?" ;)

Posté

Je retiendrais surtout la conclusion ;)

Les magic quotes (...) font de PHP un des languages les moins sensibles à l'injection SQL,

La suite met l'accent dessus : Les magic quotes désactivés, c'est la porte ouverte aux failles de sécurité. Bien sûr qu'il faut faire attention, blabla, mais il n'en reste pas moins vrai que je préfère afficher un mail avec un anti slash de trop parce que j'ai oublié de l'enlever, que de me retrouver avec une base en moins parce que c'est " plus efficace ".

Question sécurité : Qui peut le plus peut le moins !

Un exemple ?

Il existe le même problème avec les register_globals. De gros programmes tels que.. (j'me censure tout seul ;) ) activent les register_globals, permettant une variable $toto d'être activée si la variable $_GET['toto'] ou $_POST['toto'].. est activée.

C'est 'plus portable', plus efficace (?!)

(et surtout, ca évite les questions sur le support...

Le problème, c'est que de temps en temps apparait une faille de sécu..

C'est bete, non ?

Posté

Non ce n'est pas vraiment plus portable car $_GET['toto'] fonctionnera toujours meme si la configuration est différente.

Enfin bon avec des double slash, ca pose d'autres problemes ... donc on rempalce un problème par un autre ... c'est pas vraiment mieux.

Donc bon je crois qu'il faut voir ca au cas par cas.

Posté (modifié)

La portabilité d'un programme/script n'a rien a voir avec son efficacité, mais en fait à l'aptitude de celui-ci d'être changé de serveur/environement sans une relecture complète de son code source.

Mais je suis tout à fait d'accord pour dire que magic_quotes est efficace, mais personnellement, et ça n'engage qu moi, je vérifie moi-même les données reçue et je les "échape" ou les traitent en fonction des cas... mais c'est une question d'habitude ;) Mais il est sûr qu'un développeur moins expérimenté (quoi que même un "expert") peut facilement passer à côté d'une faille, mais il ne faut pas penser que tous les cas sont réglés par magic_quote non plus... les failles peuvent venir de pratiquement partout...

Modifié par TheRec
Posté (modifié)
L'echappement des guillemets est une mesure préventive. C'est tout simplement pour restreindre les risques de hack de ton serveur.

Apprends à t'en servir plutot que de chercher à les désactiver, tu auras tout à y gagner.

C'est totalement stupide.

C'est une mesure de non-sens pour éviter que les newbies ne se fassent pirater.

La valeur par défaut est à off, et de toutes façons cette mesure sera

définitivement éradiquée en php6.

Il est fortement recommandé de la désactiver et de vérifier dans chaque script si c'est activé, et le cas échéant de la nullifer en appliquant stripslashes récursivement sur $_GET, $_POST, $_COOKIE et $_REQUEST.

Perso, soit je travaille avec les quotes auto. activés, soit je suis obligé d'échapper toute saisie d'utilisateur.

Ce n'est pas la saisie utilisateur qu'il faut échapper, c'est toute chaîne de caractères que l'on veut introduire dans une requête SQL. Ce qui a priori n'a rien avoir avec GET/POST/Cookie, même si dans la pratique ce sont des variables de GET et de POST qui sont le plus souvent introduits.

Il faut tout simplement effectuer un traitement spécifique lorsqu'on génère une chaîne SQL à partir d'une chaîne PHP.

La logique veut que $_GET['truc'] contienne la donnée truc fournie en GET, et pas une donnée altérée en vue d'une utilisation avec un SGBD spécifique.

Modifié par loufoque

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...