8800 sujets

Développement web côté serveur, CMS

Salut à vous,

Je dispose d'un site Internet où les gens auront l'opportunité d'y mettre des commentaires.

N'y a-t-il pas un risque si une personne met du code html dans son commentaire ? Est-ce que son code html sera exécuté à l'affichage ou pas ? Pareil, quel risque avec du JS ou du CSS ?

Y a-t-il un moyen d'éviter ce genre de problème ?

Je pensais utiliser la fonction suivante à l'affichage : <?php echo htmlentities($str, ENT_QUOTES); ?>

Merci à vous,
Modifié par Alphonse (03 Dec 2009 - 14:36)
Lorsqu'on affiche les commentaires des utilisateurs sur notre site Internet, y a-t-il d'autres précautions à prendre à l'affichage ?

Je pense être OK au niveau de l'insertion des données dans la DB mais pas totalement OK au niveau de l'affichage des données sur mon site.
Utilise la fonction htmlspecialchars. Le code HTML saisi sera affiché brut, donc pas interprété. Ainsi iL n'y a absolument aucun risque.
Pour être un peu plus précis :

Il faut utiliser mysql_real_escape_string() pour l'insertion dans la base de données des données soumises par l'utilisateur.

Utiliser htmlentities() ou htmlspecialchars() pour l'affichage des mêmes données récupérés depuis la base.
Modifié par moust (03 Dec 2009 - 19:51)
Personnellement, je serais plus d'avis de traiter ta chaine avant l'insertion dans ta bdd, pour éviter les injections... Et puis si tu veux être radical : strip_tags(), ou tu peux quand même autoriser quelques tags !
Il est plus judicieux de ne pas altérer les données avant l'enregistrement dans la base de donnée pour des raisons évidentes Smiley cligne (pas de Ctrl+Z en SQL ^^)
Salut,

moust a écrit :
Il est plus judicieux de ne pas altérer les données avant l'enregistrement dans la base de donnée
+1

Ça n'a en tout cas aucun intérêt d'utiliser htmlspecialchars (ou pire htmlentites) avant le stockage en base (les entités html ne faisant que compliquer tous les traitements ultérieurs comme les recherches ou la réutilisation des données hors page web). Le strip_tags est déjà plus envisageable si on ne souhaite de toute façon pas autoriser d'éléments html même si là encore je préfère ne l'appliquer qu'au moment du réaffichage (ça me semble toujours intéressant de savoir ce qui avait été saisi à l'origine).
OK nickel ! Je faisais donc bien comme il faut Smiley cligne

Merci pour vos précisions !

PS: l'emploi systématique des requêtes préparées perd de son sens avec PDO mais la problématique des injections SQL ne se posent plus. Attention que ce n'est plus vrai si on utilise PDO sans passer par les requêtes préparées : il faut alors protéger les chaînes de caractères ! Smiley sweatdrop

edit: résolu !
Modifié par Alphonse (04 Dec 2009 - 09:37)
Alphonse a écrit :
Attention que ce n'est plus vrai si on utilise PDO sans passer par les requêtes préparées : il faut alors protéger les chaînes de caractères ! Smiley sweatdrop

Auquel cas il faut utiliser la méthode quote ().