IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

traitement des données avant envoie dans MySQL


Sujet :

SQL Procédural MySQL

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut traitement des données avant envoie dans MySQL
    Bonjour,

    Je sais que pour des raisons de sécurité il faut faire attention aux données que l'on récupere et que donc il existe des fonctions en PHP pour "encoder" les données :
    addslashs
    htmlspecialchars
    htmlentities
    trim
    nl2br
    et surement d'autres...

    J'aimerais savoir lesquelles utilisés, lesquelles servent réellement ?

    Enfin, qu'est-ce que vous faites vous a chaque fois que vous récupéré des informations d'un formulaire par exemple ?

    Merci
    ++

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut
    si c'est pour envoyer vers mysql
    je dirai mysql_query_string

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Plus exactement mysql_real_escape_string(). Cela permet d'éviter les injections sql.
    Pour contrer les attaques XSS, il faut faire htmlentities() avant d'afficher une donnée transmise par le client.
    Par contre, il est conseillé de stocker des données brutes dans la bdd (après passage par mysql_real_escape_string()).

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    je savais que quel que chose manquai

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    ah ok je savais pas tout ca alr, je faisais toujours comme ca moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $db = @mysql_connect($HOST, $LOGIN, $PASSWORD) or die('Connexion impossible ! '.mysql_error().')';
    @mysql_select_db($BASE,$db) or die('Impossible de se connecter à la base "'.$BASE.'" !');
    $query = 'Insert Into table (id, info1, info2) Values('.@mysql_insert_id().', '.$info1.', '.$info2.')';
    @mysql_query($query) or die('Erreur MySQL !');
    @mysql_close($db);
    Donc la je mets le mysql_real_escape_string() ou exactement ?
    Je ne doit donc pas faire de addslashs ?

    Merci
    ++

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Donc la je mets le mysql_real_escape_string() ou exactement ?
    Je ne doit donc pas faire de addslashs ?
    Surtout pas...
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par gorgonite
    Surtout pas...
    Comment ca ? Je ne vous suis plus la...

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Juste avant de faire ta requête d'insertion, tu passes toutes tes données par mysql_real_escape_string(). C'est nécessaire et suffisant.
    Si tu fais un addslashes(), tu auras un doublon de certains échappements.

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Ah oki, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    $info1 = mysql_real_escape_string($info1);
    $info2 = mysql_real_escape_string($info2);
     
    $db = @mysql_connect($HOST, $LOGIN, $PASSWORD) or die('Connexion impossible ! '.mysql_error().')';
     
    @mysql_select_db($BASE,$db) or die('Impossible de se connecter à la base "'.$BASE.'" !'); 
     
    $query = 'Insert Into table (id, info1, info2) Values('.@mysql_insert_id().', '.$info1.', '.$info2.')'; 
     
    @mysql_query($query) or die('Erreur MySQL !'); 
    @mysql_close($db);
    ?>
     
    Et quand je récupere mes données, que je l'ai affiche, la fonction mysql_real_escape_string aura donc ajouté des slashs c'est ca ?
    Pour afficher les données, j'utilise juste stripslashs ?
     
    Merci
    ++
     
    Ps : et quand magic_quotes est sur on automatiquement, les données d'un formulaire sont déja traitées non il me semble ? il faut encore faire mysql_real_escape_string ?

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Attention : mysql_real_escape_string() réclame une connexion mysql ouverte. Tu dois donc l'utiliser après ta connexion à ta bdd.
    Pour le problème des magic_quotes : vérifie si magic_quotes est à on (fonction get_magic_quotes_gpc()), et si c'est le cas, donne un coup de stripslashes. Sinon, tu risques d'avoir des doubles \\.
    Attention : adslashes() et mysql_real_escape_string() n'échappent pas les mêmes caractères. Mysql_real_escape_string échappe tous les caractères dangereux pour la bdd, pas seulement les quotes. Lis le manuel pour plus de précisions.

  11. #11
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    OKi
    J'ai trouvé ca dans le manuel PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    // Protège la variable
    function quote_smart($value)
    {
       // Stripslashes
       if (get_magic_quotes_gpc()) {
         $value = stripslashes($value);
       }
       // Protection si ce n'est pas un entier
       if (!is_numeric($value)) {
         $value = "'" . mysql_real_escape_string($value) . "'";
       }
       return $value;
    }
     
    // Connexion
    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
    OR die(mysql_error());
     
    // Fabrication d'une requête sécurisée
    $query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
    quote_smart($_POST['username']),
    quote_smart($_POST['password']));
     
    mysql_query($query);
    ?>
    Ca a l'air pas mal non ?

    Seulement j'ai juste une question, rien a voir avec le mysql_real_escape_string() mais dans ce code la, le sprintf ca sert a quoi et pourquoi ils ont mis %s ?? enfin jsais pas j'ai du mal a comprendre la syntaxe avec le sprintf... pourtant j'ai regardé dans le manuel a quoi ca correspondait cette fonction mais bon...

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    ah non jcrois que c'est bon j'ai capté d'ou ca venait...

    Mais quand je sors des infos de la BDD que j'ai inséré avec mysql_real_escape_string, je dois leur appliquer quoi ? sripslashes ?

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Non, tu ne dois rien appliquer. Les données sont renvoyées telles qu'elles étaient avant mysql_real_escape_string().

  14. #14
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    ah oki oui c'est pour ca j'ai fait un essai, est dans la base de données, il y a tout comme ce que j'avais tapé, avec les guillements et tout..
    Ok merci !
    C'est largement mieux d'utiliser ca alr, dire qu'avant je jouais avec addslashes et stripslashes apres... lol

    Merci
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modification des données avant envoi au serveur
    Par skwi6 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/04/2011, 10h25
  2. Réponses: 3
    Dernier message: 16/09/2010, 12h54
  3. sécuriser des données avant envoi
    Par Daviloppeur dans le forum Langage
    Réponses: 2
    Dernier message: 04/03/2010, 00h31
  4. Réponses: 10
    Dernier message: 21/06/2006, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo