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

PHP & Base de données Discussion :

Livre d'or et protection de base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut Livre d'or et protection de base de données
    Bonjour
    je voudrais ajouter un livre d'or sur un site, je vais récupérer le message sous forme d'une chaine de caractere par un formulaire.
    Je voudrais faire une fonction "encode_chaine" qui prend une chaine et échappent tous les caracteres dangereux pour sql avant d'enregistrer le message dans la base. Puis une fonction "decode_chaine" qd je voudrais afficher les messages j'irais les chercher dans la base et passerai les chaines à la moulinette de decode_chaine avant de les afficher.

    Je pense utiliser ereg_replace pour faire tout ça.

    Donc dans la théorie je crois que j'ai bon, dans la pratique je sais pas comment faire
    1/ parce que je suis pas sure de savoir lister tous les caractères "dangeureux" pour sql (à part ; je sais pas trop à quoi d'autres il faut faire attention)

    2/ surtout parce que je connais pas le caractere d'échappement en sql

    il y a surement tonnes de fonctions déjà écrites qui font ça mais je préfère pas en prendre au pif vu que je suis pas tres douée en traitement de chaines de caracteres je préfère vos conseils plutot que de recoller une fonction que je ne comprends qu'à moitier

    J'attends votre aide
    merci d'avance
    ++
    Lisa

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    il y a surement tonnes de fonctions déjà écrites qui font ça
    Exactement.
    Avant d'insérer le msg dans la BdD : mysql_real_escape_string( ) (éventuellement un stripslashes( ) auparavant si les magic-quotes sont actives)
    Avant d'afficher le msg sur la page : htmlspecialchars( )
    C'est tout

    http://fr.php.net/mysql-real-escape-string
    http://fr.php.net/htmlspecialchars
    Magic-quotes : http://fr.php.net/manual/fr/security.magicquotes.php

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En dehors de la protection de la chaine SQL, n'oublie pas de purger egalement ta chaine de toutes les balises (html et javascript).
    Il y a des robots qui passent 24/24 a essayer de placer des saloperies sur le moindre formulaire qu'ils trouvent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    ok cool
    ça veut dire quoi les magic quotes ? et comment savoir si elles sont activées ? (je suis hébergée chez ovh, je fais mes tests en local avec easyphp)

    Je voudrais aussi qqchose qui me remplace les \n par des <br> tant qu'à faire ...
    c'est possible ?
    eidt : ça c'est bon j'ai trouvé nl2br

    merci beaucoup en tout cas !

    oui sabotage j'aimerais bien mais comment il faut faire ?

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lisa.a Voir le message
    ça veut dire quoi les magic quotes ? et comment savoir si elles sont activées ? (je suis hébergée chez ovh, je fais mes tests en local avec easyphp)
    Lire la doc, j'ai donné le lien plus haut

    Je voudrais aussi qqchose qui me remplace les \n par des <br> tant qu'à faire ...
    c'est possible ?
    Oui lors de l'affichage avec nl2br( ) après le htmlspecialchars( ).
    http://fr.php.net/nl2br

  6. #6
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    ah oui zut désolée ... comme c'était en bas de ton message et que c'était des liens mes yeux ont filtré en pensant que c'était ta signature :p

    encore merci !
    je note ça comme résolu
    ceci dit si sabotage veut bien me dire comment faire je reste preneuse

  7. #7
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    oups, en fait j'ai un soucis
    mysql_real_escape_string me rajoute des\n et \r... et je ne sais pas comment les enlever au décodage
    help ?
    (désolée )

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lisa.a Voir le message
    mysql_real_escape_string me rajoute des\n et \r...
    Ben non, ils doivent venir d'ailleurs.

  9. #9
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    bon tant pis il est tard j'en ai marre j'utiliserai addslash à la place du mysql_reasl_escape_string
    c'est pas trop grave ?

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lisa.a Voir le message
    bon tant pis il est tard j'en ai marre j'utiliserai addslash à la place du mysql_reasl_escape_string
    c'est pas trop grave ?
    1. Tu n'auras pas mon agrément, mais tu es libre de faire ce que tu veux hein
    2. Le problème risque de persister car mysql_real_escape_string( ) ne rajoute pas de \r ou \n

  11. #11
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Le problème risque de persister car mysql_real_escape_string( ) ne rajoute pas de \r ou \n
    +1
    Ton problème vient d'ailleurs.

    Un petit bout de code pourrait aider à savoir d'où

  12. #12
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    Citation Envoyé par Séb. Voir le message
    1. Tu n'auras pas mon agrément, mais tu es libre de faire ce que tu veux hein
    nan jpeux pas la culpabilité me hante )

    alors le code :
    d'abord ce que je rentre dans mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'bravo super !
    g"enil!
    ensuite mon code php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $message=addslashes(nl2br(htmlentities($_POST['message'])));
       $marchepas=mysql_real_escape_string(nl2br(htmlentities($_POST['message'])));
     
        echo $message;
        echo "<BR />";
        echo stripslashes($message);
        echo "<BR />";
        echo $marchepas;
    et finalement mon résultat à l'écran

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    \'bravo super !
    g"enil!
    'bravo super !
    g"enil!
    \'bravo super !
    \r\ng"enil!
    Si vous voyez d'où ça peut venir ça m'intéresse

  13. #13
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Mais c'est normal, tu ne fais pas ce qu'on t'a recommandé !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $àInsérerDansLaBDD = mysql_real_escape_string($_POST['message']) ;
    Eventuellement si tu veux supprimer les tags comme le préconise sabotage (perso je préfère gérer ça à l'affichage avec htmlspecialchars( )) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $àInsérerDansLaBDD = mysql_real_escape_string(strip_tags($_POST['message'])) ;
    Ensuite pour l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $àAfficher = nl2br(htmlspecialchars($line['message'])) ;

  14. #14
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    négatif
    je colle les nouveaux résultats qui marchent toujours pas (toujours avec la meme entrée dans le formulaire)
    mon code php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $message=mysql_real_escape_string(strip_tags($_POST['message']));
     
        echo $message;
        echo "<BR />";
        echo nl2br(htmlspecialchars($message));
        echo "<BR />";
    le résultat à l'écran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \r\n\'bravo super !\r\ng\"enil!\r\n
    \r\n\'bravo super !\r\ng\"enil!\r\n

  15. #15
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Vu ce que tu fais de $_POST['message'] je ne vois pas d'anomalie.

  16. #16
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    moi non plus ...
    et pourtant ils sont là ces \r et \n ...
    alors ? j'ai ton aval pour passer en addslash ? ou jdois passer la nuit à debugger ?
    enfin non pas la nuit parce que jvais me coucher là de toutes façons

  17. #17
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lisa.a Voir le message
    et pourtant ils sont là ces \r et \n ...
    Et bien oui, c'est normal, mysql_real_escape_string( ) échappe les \r et les \n (entre autres), donc tu les vois apparaître à l'écran.
    Cependant ta chaîne est censée être soumise à MySQL, ce qui n'est pas fait pour le moment.
    MySQL digèrera les \r et \n échappés et ils n'apparaîtront plus en tant que littéraux lors de leur SELECTion future.

    alors ? j'ai ton aval pour passer en addslash ? ou jdois passer la nuit à debugger ?
    Faire ce qui est prévu suffira. Bref, envoie ta requête INSERT à MySQL avec mysql_query( ), et ensuite affiche les messages après extraction de la BdD (requête SELECT).
    Sais-tu faire cela ?

    enfin non pas la nuit parce que jvais me coucher là de toutes façons
    Bonne nuit alors !

  18. #18
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    Citation Envoyé par Séb. Voir le message
    MySQL digèrera les \r et \n échappés et ils n'apparaîtront plus en tant que littéraux lors de leur SELECTion future.
    oh ! j'avais pas compris que mysql retraitait la chaine encore derriere...


    merci beaucoup en tout cas en effet ça marche nickel !!

    Pour que je sache tu peux juste me raconter ce que fait mysql_real_escape_string de plus que addslash parce qu'ils sont pas tres détaillés dans la doc sur la différence "concrete" entre les deux ... enfin j'ai pas trouvé

  19. #19
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    mysql_real_escape_string( ) échappe les caractères potentiellement dangereux pour MySQL.
    addslashes( ) n'échappe que les ', " et \ : il a un usage plus générique.

  20. #20
    Membre confirmé Avatar de lisa.a
    Inscrit en
    Mai 2004
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 95
    Par défaut
    oui justement c'était ça ma question, c'est quoi les caracteres dangereux pour sql à part ' ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/12/2009, 07h19
  2. [VB.NET] livres sur vb.net et les bases de données access
    Par Herlece dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/04/2006, 21h30
  3. Livre gratuit sur les bases de données...
    Par benby dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 26/05/2005, 12h24
  4. Protection d'une base de donnée
    Par portu dans le forum Windows
    Réponses: 4
    Dernier message: 30/08/2004, 15h03
  5. Recherche Livre / Conseils sur la conception de Base
    Par Yeuma dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 02/01/2004, 14h25

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