[RESOLU] addslashes-mysql_real_escape_string.......utilisation :(

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 : [RESOLU] addslashes-mysql_real_escape_string.......utilisation :(

Re: [RESOLU] addslashes-mysql_real_escape_string.......utilisation :(

par martineP » 31 août 2015, 14:12

Ohhhh !!!!! Bonjour et merci beaucoup pour ces précieuses informations ! Je vais regarder çà !

Re: [RESOLU] addslashes-mysql_real_escape_string.......utilisation :(

par Ryle » 31 août 2015, 12:08

Bonjour,

En fait, le "\" ne devrait pas apparaître une fois la donnée enregistrée en base. Celui-ci doit uniquement servir à protéger les caractères spéciaux lors de l'exécution de la requête. Si en base de données tu vois apparaître la chaîne " L\'apostrophe ", c'est qu'au moment de l'insertion en base, la requête sql a utilisé la valeur " L\\\'apostrophe ", ce qui indique que ta chaîne a été protégée deux fois... protéger une chaîne c'est bien, mais là c'est un peu trop ;)

Pourquoi une double protection ? Parce que ton serveur php doit être dans une version <= 5.3 et configurée avec la directive magic_quotes_gpc à "on". Cette directive (qui a disparu avec php 5.4) protège automatiquement les variables que tu récupères via GET, POST, REQUEST ou COOKIES en faisant l'équivalent d'un addslashes(). Lorsque tu appelles mysql_real_escape_string() sur ces variables, tu doubles donc le traitement.

Pour éviter cela, le mieux est soit de désactiver cette directive et ne te fier qu'à ton code pour protéger les variables, ou si tu ne peux pas la désactiver, vérifier si celle-ci est active (get_magic_quotes_gpc()) et le cas échéant, en annuler les effets, de façon à ce que ton code puisse traiter les données telles qu'elles sont soumises (Il est par contre du coup indispensable de contrôler/protéger toutes les données transmises).

Pour plus d'information sur la directive en question :
http://php.net/manual/fr/security.magicquotes.what.php

L'avantage de ce fonctionnement plutôt que d'utiliser stripslahes à l'affichage, c'est que les données que tu as en base pourront servir à d'autres traitements que juste apparaitre sur une page php, et ne nécessiteront pas systématiquement d'être retraitées.

Re: addslashes-mysql_real_escape_string.......utilisation :(

par martineP » 28 août 2015, 19:48

Trouvé : il suffit de mettre la fonction stripslashes devant les variables à afficher.

Re: addslashes-mysql_real_escape_string.......utilisation :(

par martineP » 28 août 2015, 17:03

Il apparait dans la BDD une seule fois et il est donc affiché qd je l'appelle dans un script. Ca je comprends. Si je ne mets pas de mysql_real_escape_string, c'est porte ouverte à tous à ma BDD, non ?
Donc, je ne mets pas en doute ce que tu me dis, mais j'essaie de comprendre et voudrais etre sure de bien t'interpreter : Comment peut il etre ajouter 2 fois ? Voici ma requête :
<?php
$sql = 'INSERT INTO reponses VALUES("", "'.mysql_real_escape_string($_POST['auteur']).'", "'.mysql_real_escape_string($_POST['message']).'", "'.$date.'", "'.$_GET['numero_du_sujet'].'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
?>

Re: addslashes-mysql_real_escape_string.......utilisation :(

par or 1 » 28 août 2015, 16:37

s'il y a un \, c'est qu'il a été ajouté 2 fois, donc, par exemple, qu'il ne faut pas utiliser mysql_real_escape_string

addslashes-mysql_real_escape_string.......utilisation :(

par martineP » 28 août 2015, 16:29

Pour insérer des données fournir par l'internaute dans la BDD, j'utilise mysql_real_escape_string. C'est ok, ca met les \ devant les guillemets simple ou double mais quand je veux afficher ces données, j'ai biensur ce petit \ qui apparait et ce n'est pas très esthétique :/ Une petite idée pour corriger ?