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 :

Traitrement des commentaires


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut Traitrement des commentaires
    Bonsoir tout le monde!

    J'ai un petit soucis avec le traitement des commentaires que peuvent faire les internautes, j'autorise un commentaire allant de 1 à 500 caractères! j utilise cette fonction pour enlever les espaces mit avant et apres les commentaires, mais aussi permmettant de remplacer les x espaces mis entre chaque mot par 1 seul espace;

    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
     
    <?php
    function check_space($string)
    {
    		$temp=trim($string);
    		$string="";
    		for ( $i = 1 ; $i < strlen($temp) +1 ; $i ++ )
    		{
    			if ( $temp[$i-1]==" " &&  $temp[$i]==" ")
    			{
    			}
    			else
    			{
    				$string.= $temp[$i-1] ;
    			}
    		}
    		return $string;
    }
    ?>
    Mais l utilisateur peux quand même faire autant de retour a la ligne qu il veut.. comment puis je y remedier ?
    Il y a t-il d autre securitées a prendre en compte ?

    merci d avance

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Plusieurs choses:
    1. les retours la ligne doivent être convertis en <br /> ou ils ne s'afficheront pas dans du HTML
    2. les double espaces peuvent aisément être remplacés par une regexp
    3. je ne vois nulle part où il est mentionné que la taille max est 500 caractère dans ton code
    4. tu dois IMPERATIVEMENT supprimer tous les tags HTML pour éviter les injections XSS


    Voici à quoi pourrait ressembler notre fonction de nettoyage:
    Code php : 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
    function sanitize_comment_string ($comment) {
        // enlever les espaces en début et fin
        $comment = trim($comment);
     
        // si la chaine est vide, pas la peine de continuer
        if (empty($comment)) return false;
     
        // enlever  les balises sauf <b>,<i> et <u>
        $comment = trim(strip_tags($comment, array('<b>','<i>','<u>'));
     
        // enlever les espaces en trop
        $comment = preg_replace('~\s{2,}~', ' ', $comment);
     
        // convertir les fins de lignes en <br />
        $comment = str_replace("\n", '<br />', $comment);
     
        // couper le commentaire si trop long
        if (strlen($comment) > 500) $comment = substr($comment, 0, 499);
     
        // renvoyer notre commentaire tout propre :)
        return $comment;
    }

  3. #3
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Hello,
    pour les retours à la ligne, tu dois pouvoir passer par une expression régulière (où les retours à la ligne correspondent à "/n").
    Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $commentaire=preg_replace('#(.\n)+#', '&nbsp;', $commentaire);
    devrait faire l'affaire.
    En espérant t'avoir été utile...

    edit: Benjamin a répondu avant moi... Benjamin, dis moi, est-ce que htmlentities est suffisant pour éviter les XSS ?

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Merci de la réponse!
    les retours la ligne doivent être convertis en <br /> ou ils ne s'afficheront pas dans du HTML
    ui mais quand la personne fait un retour a la ligne, que j'enregistre dans la base de donnée pour le réafficher en suite, les retours a la ligne sont automatiquement convertit en <br /> nan ? quand je regarde le code source en tout cas tous les retours a la ligne sont remplacé par des <br />

    je ne vois nulle part où il est mentionné que la taille max est 500 caractère dans ton code
    C'est parce que je n'ai pas mis tout mon code uniquement se qui m'enbete, en gros ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( (!empty($commentaire)) && ($commentaire != "") && (strlen($commentaire) <= 500) )
    {
    // insertion dans la base de donnée
    }
    tu dois IMPERATIVEMENT supprimer tous les tags HTML pour éviter les injections XSS
    Ca je le fais uniquement à l affichage via la fonction htmlspecialchars comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<p>'. nl2br(htmlspecialchars($donnees['commentaire'])) .'</p>';
    merci de ta réponse
    edit: merci a toi aussi kalimukti vaut mieux plusieurs réponses !

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    htmlentities va tout te convertir en caractères valides HTML donc oui, c'est suffisant comme sécurité pour éviter les XSS. Maintenant, on ne veut pas forcément voir ces caractères.

    ui mais quand la personne fait un retour a la ligne, que j'enregistre dans la base de donnée pour le réafficher en suite, les retours a la ligne sont automatiquement convertit en <br /> nan ?
    Tiens donc ? On fait de la sorcellerie à ses heures perdues ? Non bien entendu, ce sont toujours les même caractères et une fois mis dans le HTML (par exemple dans un <p> ou <blockquote>) ils seront ignorés ou considérés comme des espaces.

    quand je regarde le code source en tout cas tous les retours a la ligne sont remplacé par des <br />
    C'est nl2br qui fait ça

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    htmlentities va tout te convertir en caractères valides HTML donc oui, c'est suffisant comme sécurité pour éviter les XSS. Maintenant, on ne veut pas forcément voir ces caractères.
    ouai mais il convertit tous les caractères en entités html , les accents aussi (ex : é devient &eacute;...) c est pas très pratique, htmlspecialchars me semble suffisant !


    Citation:
    ui mais quand la personne fait un retour a la ligne, que j'enregistre dans la base de donnée pour le réafficher en suite, les retours a la ligne sont automatiquement convertit en <br /> nan ?
    Tiens donc ? On fait de la sorcellerie à ses heures perdues ? Non bien entendu, ce sont toujours les même caractères et une fois mis dans le HTML (par exemple dans un <p> ou <blockquote>) ils seront ignorés ou considérés comme des espaces.

    Citation:
    quand je regarde le code source en tout cas tous les retours a la ligne sont remplacé par des <br />
    C'est nl2br qui fait ça
    ok

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Au contraire, le standard recommande d'utiliser des codes HTML pour les caractères accentués. http://www.w3.org/TR/xml-entity-names/
    La raison est simple: ça permet d'éviter les problèmes liés à l'encodage.

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Au contraire, le standard recommande d'utiliser des codes HTML pour les caractères accentués. http://www.w3.org/TR/xml-entity-names/
    La raison est simple: ça permet d'éviter les problèmes liés à l'encodage.
    D'accord j'avais lu qu' avec utf-8 ce n'était plus un problème, qu il y avais juste le "&" a convertir en "&amp;"

  9. #9
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    htmlentities va tout te convertir en caractères valides HTML donc oui, c'est suffisant comme sécurité pour éviter les XSS. Maintenant, on ne veut pas forcément voir ces caractères.
    Merci pour ta réponse. Voir les caractères ? On les verra que dans le code source de toute façon... je vois pas en quoi ça peut gêner.

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Il y a une différence notable tout de même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $html = "<b>Hello</b>";
    echo htmlentities($html); // &lt;b&gt;Hello&lt;/b&gt;
    echo strip_tags($html); // hello

  11. #11
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Il y a une différence notable tout de même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $html = "<b>Hello</b>";
    echo htmlentities($html); // &lt;b&gt;Hello&lt;/b&gt;
    echo strip_tags($html); // hello
    LOL... oui, bien sur... *je dois être fatigué moi*
    aaaa y est, j'ai compris ce que tu voulais dire. Merci de tes réponses

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    D'accord j'avais lu qu' avec utf-8 ce n'était plus un problème, qu il y avais juste le "&" a convertir en "&amp;"
    Tout à fait, et je t'encourage à utiliser UTF-8 partout. Mais utiliser UTF-8 sans savoir de quoi il retourne et sans connaître la problématique ASCII vs multi-byte strings c'est un peu comme conduire sans savoir comment marche un moteur
    Voici un bon point de départ (pour ceux qui lisent l'anglais): http://www.utf8everywhere.org/

  13. #13
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Tout à fait, et je t'encourage à utiliser UTF-8 partout. Mais utiliser UTF-8 sans savoir de quoi il retourne et sans connaître la problématique ASCII vs multi-byte strings c'est un peu comme conduire sans savoir comment marche un moteur
    Voici un bon point de départ (pour ceux qui lisent l'anglais): http://www.utf8everywhere.org/
    xD bah les 3/4 des personnes conduisent sans savoir comment marche un moteur !
    Je me suis quand même renseigner sur l utf-8, savoir si les caractères dit speciaux, accent ou autre devait être convertit en entité!

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    comme cela c'est plus facile :

    tu a une personne de la zone europe qui veux poster un message sur ton site, et bien, c'est si tu n'est pas en utf8, tu aura stocké des ?, parce que ton jeu de caractère est réduit au script Latin par exemple

    donc à tous de voir ce qu'il est mieux de faire

  15. #15
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    bah les 3/4 des personnes conduisent sans savoir comment marche un moteur !
    Et les 3/4 des personnes sont de mauvais conducteurs

  16. #16
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Merci pour vos réponses

    J'ai toujours le même problème:
    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
     
    function sanitize_comment_string ($comment) {
        // enlever les espaces en début et fin
        $comment = trim($comment);
     
        // si la chaine est vide, pas la peine de continuer
        if (empty($comment)) return false;
     
        // enlever  les balises sauf <b>,<i> et <u>
        $comment = trim(strip_tags($comment, array('<b>','<i>','<u>'));
     
        // enlever les espaces en trop
        $comment = preg_replace('~\s{2,}~', ' ', $comment);
     
        // convertir les fins de lignes en <br />
        $comment = str_replace("\n", '<br />', $comment);
     
        // couper le commentaire si trop long
        if (strlen($comment) > 500) $comment = substr($comment, 0, 499);
     
        // renvoyer notre commentaire tout propre :)
        return $comment;
    }
    est ce indispensable ceci? car j'affiche les commentaires en utilisant la fonction htmlspecialchars
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        // enlever  les balises sauf <b>,<i> et <u>
        $comment = trim(strip_tags($comment, array('<b>','<i>','<u>'));
    Pour ce code autant utiliser la fonction " nl2br" nan?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        // convertir les fins de lignes en <br />
        $comment = str_replace("\n", '<br />', $comment);
    et au final j'ai pas se que j'attendais par exemple si il y a 5 retour a la ligne, qu il y en ai a l affichage plus qu'un seul!

  17. #17
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Ah, mais tu parlais des espaces multiples plus haut.

    Bon pour les retours à la ligne multiples, c'est assez simple:
    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
    $a = <<< EOF
     
     
     
     
    hello
     
     
     
     
    world !
     
     
     
     
    EOF;
     
    $b = preg_replace("~(\r?\n)+~", "<br />", trim($a));
     
    echo $b;

Discussions similaires

  1. Des commentaires dans le fichier Boot.ini
    Par Furius dans le forum Windows
    Réponses: 6
    Dernier message: 27/10/2005, 11h41
  2. [C#] Traduire la documentation issue des commentaires
    Par agueffier dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/06/2005, 02h52
  3. [C#] Comment se formalise des commentaires ?
    Par TheSeb dans le forum EDI/Outils
    Réponses: 2
    Dernier message: 30/05/2005, 00h20
  4. [NetBeans] Changer la couleur des commentaires
    Par Lorenzox dans le forum NetBeans
    Réponses: 3
    Dernier message: 15/12/2004, 09h50

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