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

Langage PHP Discussion :

[Sécurité] addslashes & mysql_real_escape_string ?


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut [Sécurité] addslashes & mysql_real_escape_string ?
    Bonjour,

    Pour securiser mes requetes ou je passe des parametres en post ou en get, je rajoute la fonction mysql_real_escape_string

    Sauf que pour certain champs, j'ai des doutes.
    J'ai des champs qui contiennent du contenu html par exemple. J'insere ces champs en faisant pour chacun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    addslashes(htmlentities($champ));
    Alors je suis en train de me dire que si je fait un mysql_real_escape_string avant ou aprés, ça va me quadrupler mes slash par exemple non ?

    est ce que je peux l'utiliser ici ou pas car je me demande si il y a pas une faille si un hacker essai de mettre un quote.

    Pouvez vous me conseiller ?

    merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Lorsque tu fais une insertion en base de données, tu as besoin de sécuriser les caractères sensibles pour mysql, et donc, on utilise généralement mysql_real_escape_string.

    Il n'y a pas besoin d'htmlentities ou d'addslashes. HTMLENTITIES va convertir la chaine en entité HTML, et tu vas te retrouver avec du html en bdd donc, ce qui n'est pas la bonne méthode.
    HTMLENTITIES s'utilise plutot pour afficher du contenu textuel dans une page web, pour assurer un affichage correct de tes caracteres dans une page web.

    Pour résumé :

    ->Pour insérer en bdd : mysql_real_escape_string();
    ->Pour afficher une donnée à l'écran : htmlentities($var,ENT_QUOTES)

  3. #3
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    Il n'y a pas besoin d'htmlentities ou d'addslashes.
    Si justement car le client ne veut pas stocker <p>un fichier toto/titi.gif</p> mais plutot la chaine encodée

    aprés l'utilité du addslashes, peut etre que je peut le remplacer par mysql_real_escape_string(); non ?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    C'est en général pour répondre à cette problématique que le texte n'est pas formaté en HTML dans la base, mais à l'aide de BBCode ou d'une syntaxe Wiki. Cela t'oblige à effectuer un traitement avant d'enregistrer en base, + un autre avant d'afficher dans le navigateur, mais c'est la meilleure option à long terme

  5. #5
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    Merci pour ta réponse yogui mais j'ai peur de pas comprendre ?

    Ce que je fais convient ou non ?

    Faut t'il que je garde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    addslashes(htmlentities($champ));
    et surtout est ce que niveau sécurité c'est ok ou faut-il que je remplace par autre chose ?

    merci

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ce n'est pas du tout adapté

    En gros, pour envoyer dans la BDD tu devrais employer la fonction spécifique à cette BDD (par exemple mysql_real_escape_string pour MySQL), ou pour envoyer dans une page Web tu utilises htmlspecialchars ou htmlentities.

    Chaque utilisation de la variable a sa propre fonction pour la mettreen forme, il ne faut pas les confondre.

    Si tu utilises htmlentities/htmlspecialchars pour enregistrer en base, cela complique les choses lorsque tu voudras envoyer les mêmes infos dans un document non-HTML (par exemple Word, PDF, image...). La BDD n'est pas prévue pour enregistrer des données déjà mises en forme, c'est pour cela qu'il existe les syntaxes alternatives comme Markdown et Wiki.

    Au passage, addslashes n'est presque jamais adapté à la situation.

Discussions similaires

  1. La Sécurité dans Access
    Par Maxence HUBICHE dans le forum Sondages et Débats
    Réponses: 81
    Dernier message: 24/06/2007, 01h07
  2. Réponses: 21
    Dernier message: 30/03/2007, 15h21
  3. [Sécurité] intval() ou mysql_real_escape_string() ?
    Par JackBeauregard dans le forum Langage
    Réponses: 10
    Dernier message: 12/09/2006, 13h15

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