Problème de stripslashes

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 : Problème de stripslashes

Re: Problème de stripslashes

par AB » 27 nov. 2010, 04:40

Oui en fait comme le dit damaskinos il faut enlever les slash quand tu récupère ta variable via $_POST si get_magic_quote_gpc est activé et ensuite tu utilises les fonctions spécifiques (mysql_real_escape_string, mysqli_real_escape_string ...) pour insérer tes variables en bdd.

On peut éventuellement désactiver les magic_quotes par l'intermédiaire d'un fichier .htaccess comme le dit devlop78 mais ce n'est pas toujours possible donc pour avoir un maximum de portabilité de ton script tu peux utiliser la fonction que t'a indiquée damaskinos
function Verif_magicquotes ($chaine)
{
       if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

       return $chaine;
} 
Tu trouveras ici un exemple complet de code où cette fonction est utilisée.

Sinon à savoir que gpc (à la fin du get_magic_quotes_gpc) indique que les slash ne sont rajoutés automatiquement (si get_magic_quote_gpc est activé) que sur les variables gpc = GET, POST et COOKIE.

Re: Problème de stripslashes

par devlop78 » 27 nov. 2010, 00:58

Je rejoins les messages précédents :

Magic quotes, c'est mal. Déjà tout petit (lol) ça faisait perdre beaucoup de temps.

donc .htaccess => on désactive ce traître.

Ensuite, tu récupères ta variable, tu fais jou jou avec,

Tu veux l'enregistrer dans ta base de données ? Tu utilises la fonction qu'il faut, et au pire tu lui envoyer INSERT INTO ... VALUES addslashes($_POST['mavar'])

Tu veux le réafficher dans un formulaire ? Tu utilises htmlentities paf : <input type=text name="pseudo" value="'.htmlentities($_POST['pseudo']).'" />

Trouves-tu vraiment ça normal de manipuler une variable polluée ? Là, comme ça, tout est plus simple ! Donc bien sûr, à aucun moment, ne changer la valeur de la variable elle-même, mais bien envoyer (à la base, au formulaire, etc) le résultat d'une fonction. De toutes façons, faire des stripslashes sur des addslashes et tout, c'est sale et au final, on se sait plus quel slash est à l'utilisateur, quel slash est à la sécurité.

Re: Problème de stripslashes

par damaskinos » 26 nov. 2010, 22:45

Ok ,

Je te refère à la doc http://php.net/manual/fr/function.get-m ... es-gpc.php

Regarde l'exemple 1. Lit le tout bien sur.

En gros si magic_quotes est activé, un slash est automatiquement ajouté. Si tu ajoutes addslashes, bien un slash va être ajouté pour l'apostrophe, et un pour le slash ajouté à cause de magic_quotes. du coup tu te retrouve avec quelque chose comme ça:

"aujourd\\\'hui"

Donc ce que fait la fonction, elle vérifie si magic_quotes est activé, elle enlève les slash ajoutés sinon elle te retourne la variable tel qu'elle. Si tu doit ajouter le contenu de la variable dans ta bd, tu utilises la fonction appropriée sinon, tu n'as pas besoin de rien appliquer dessus. Tu la mets dans ta session. Quand tu la recupères, tu l'envoie encore à ta fonction voir s'il y a eu des slash d'Ajouté quand tu as changé de page. Pour afficher tu utilises htmlentities. Je ne sais pas si le magic_quotes affecte les variables de SESSION. Sinon quand tu recupères des sessions pas besoin de l'envoyer à la fonction. À vérifier, Si un gourou passe par là, il pourrait nous élairer.

Voilà, j'espère que c'Est plus claire

Re: Problème de stripslashes

par xilil » 26 nov. 2010, 22:03

Merci pour tes réponses rapides,

si je comprends bien le fonctionnement de ta fonction,
elle vérifie si magic_quotes est activée ou non et rajoute en conséquence des stripslashes.

Or j'ai déjà essayé sans stripslashes et le texte s'affiche cette fois avec trois antishlashs : "aujourd\\\'hui"

Ai-je mal compris le but de cette fonction ?

Re: Problème de stripslashes

par damaskinos » 26 nov. 2010, 21:50

J'ai bien compris ton problème. As-tu lu ce que je t'ai ecris à propos des magic_quotes. Pour la base de donnée il est mieux d'utiliser les fonctions appropriées de BD que addslashes. C'était juste une remarque sinon pour ton problème essaye la fonction.

Bonne continuation

Re: Problème de stripslashes

par xilil » 26 nov. 2010, 21:39

En fait, mon problème ne concerne pas les données qui sont entrées dans la base de données mais celles qui transitent directement avec les sessions.

Re: Problème de stripslashes

par damaskinos » 26 nov. 2010, 21:19

Salut,

Bon premièrement avant d'ajouter des slash verifie si les magic_quotes sont pas à ON.

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

       return $chaine;
} 
Ensuite, pour insérer dans ta bd je te conseille d'utiliser la fonction appropriée selon si tu utilises mysql, pdo, ou mysqli etc...

Par exemple pour mysql utilise
 mysql_real_escape_string
mysqli c'est :
 mysqli_real_escape_string  
etc.. à toi de faire la recherche pour ce que tu utilises. Du coup tu as pas besoin de addslashes

Bonne continuation

Problème de stripslashes

par xilil » 26 nov. 2010, 21:05

Bonsoir à tous,

voilà je vous explique rapidement comment transitent les données de mon formulaire.

Après avoir cliqué sur "envoyer" les données sont envoyées par POST dans une page de traitement.
Cette page rajoute des slash aux données (car il y a du texte) via la fonction addslashes et une variable leur est attribuée :
$texte = addslashes($_POST["texte"])

Cette variable $texte est envoyée dans ma base de donnée et s'y affiche bien correctement : "aujourd\'hui" par exemple
Ma page de traitement s'occupe également d'utiliser les sessions pour ensuite réutiliser les données dans une page de remerciement :

$_SESSION['texte'] = $texte;

Finalement j'appelle cette session sur ma page de remerciement en n'oubliant pas les stripslashes :

stripslashes($_SESSION['texte'])

Mon problème : malgré le stripslashes, les données s'affichent avec un antislash dans la page de remerciement lorsqu'il y a un '
J'ai également essayé en supprimant le stripslashes où là "aujourd'hui" s'affiche carrement comme ça : "aujourdh\\\'hui"

Je suis hébergé chez ovh et je n'ai pas accés à mon php.ini
Quelqu'un aurait-il une solution ? Merci d'avance.