Question

Comment limiter les types de HTML qu'un utilisateur peut entrer dans une zone de texte? J'organise un petit forum en utilisant un logiciel personnalisé que je teste en version bêta, mais je dois savoir comment limiter l'entrée HTML. Des suggestions?

Était-ce utile?

La solution

Je suggérerais une approche légèrement différente:

  • ne filtre pas les données utilisateur entrantes (au-delà de la prévention de l'injection SQL). les données utilisateur doivent être aussi pures que possible.
  • filtrer toutes les données sortantes de la base de données, c’est là que des choses comme l’élimination de balises, etc. devraient se produire

garder les données des utilisateurs propres vous permet plus de flexibilité dans la façon dont elles sont affichées. filtrer toutes les données sortantes est une bonne habitude à prendre (le long du meme de données jamais confiance).

Autres conseils

Vous n'avez pas indiqué en quoi le forum a été construit, mais s'il s'agit de PHP, consultez:

  

http://htmlpurifier.org/

     

Fonctionnalités de la bibliothèque: Liste blanche, Suppression, Formé, Imbrication, Attributs, XSS safe, Normes sûres

Une fois le texte soumis, vous pouvez supprimer toutes les balises qui ne correspondent pas à votre ensemble prédéfini à l'aide d'une expression rationnelle en PHP.

Cela ressemblerait à quelque chose comme ceci:

find open tag (<)
if contents != allowed tag, remove tag (from <..>)
  1. Analyser les données fournies et supprimer toutes les balises HTML qui ne correspondent pas exactement à la liste que vous autorisez. Cela peut être une expression rationnelle complexe ou vous pouvez effectuer une itération avec état à l'aide du caractère char [] de la chaîne d'entrée, en créant la chaîne d'entrée autorisée et en supprimant les attributs indésirables sur les balises telles que img.

  2. Utilisez un système de code différent (BBCode, Markdown)

  3. Trouvez un code en ligne qui le fait déjà, à utiliser comme base pour votre implémentation. Par exemple, Slashcode doit effectuer cela, donc cherchez son implémentation dans Perl et utilisez les expressions rationnelles (que je suppose sont là)

Peu importe ce que vous utilisez, assurez-vous d'être informé du type de contenu HTML qui peut être dangereux.

par exemple. un < script > tag est assez évident, mais un < style > La balise est tout aussi mauvaise dans IE, car elle peut appeler des commandes JScript.

En fait, n'importe quel style = & "; ... &"; attribut peut invoquer un script dans IE.

< objet > serait une étiquette de plus à se lasser.

PHP est livré avec une simple fonction strip_tag pour supprimer les balises HTML. Cela permet à certaines étiquettes de ne pas être supprimées.

Exemple # 1 Exemple avec strip_tags ()

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>

L'exemple ci-dessus générera:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>

Personnellement, pour un forum, j'utiliserais BBCode ou Markdown en raison de la quantité d'assistance fournie et de fonctionnalités fournies, telles que la prévisualisation en direct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top