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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 39
    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
    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é
    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
    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 !

  4. #4
    Membre chevronné
    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
    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 ?

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 39
    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
    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 confirmé
    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
    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 confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 39
    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
    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 confirmé
    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
    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 chevronné
    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
    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 confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 39
    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
    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 chevronné
    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
    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

Discussions similaires

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

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