web-dev-qa-db-fra.com

Désinfectant HTML simple en Javascript

Je recherche un simple désinfectant HTML écrit en JavaScript. Il n'est pas nécessaire qu'il soit 100% sécurisé.

J'implémente Markdown et l'éditeur WMD Markdown (la branche SO principale de github) sur mon site Web. Le problème est que le code HTML affiché dans l'aperçu en direct n'est pas filtré, comme ici sur SO. Je recherche un désinfectant HTML simple/rapide écrit en JavaScript afin de pouvoir filtrer le contenu de la fenêtre d'aperçu.

Pas besoin d'un analyseur complet avec une protection XSS complète. Je ne renvoie pas la sortie au serveur. J'envoie le Markdown au serveur sur lequel j'utilise un désinfectant HTML complet avant de stocker le résultat dans la base de données.

Google est absolument inutile pour moi. Je viens de recevoir des centaines d'articles (souvent incorrects) sur la façon de filtrer le javascript depuis le HTML généré par l'utilisateur dans toutes sortes de langages côté serveur.

METTRE À JOUR

Je vais expliquer un peu mieux pourquoi j'ai besoin de ça. Mon site Web a un éditeur très similaire à celui de StackOverflow. Il y a une zone de texte pour entrer la syntaxe MarkDown et une fenêtre d'aperçu en dessous qui vous montre à quoi ça ressemblera une fois que vous l'avez soumise.

Lorsque l'utilisateur soumet quelque chose, il est envoyé au serveur au format MarkDown. Le serveur le convertit en HTML, puis exécute un assainisseur HTML pour nettoyer le code HTML. MarkDown autorise le HTML arbitraire, je dois donc le nettoyer. Par exemple, l'utilisateur tape quelque chose comme ceci:

<script>alert('Boo!');</script>

Le convertisseur MarkDown ne le touche pas puisqu'il s'agit de HTML. L'assainisseur HTML le supprime afin que l'élément de script disparaisse.

Mais ce n'est pas ce qui se passe dans la fenêtre d'aperçu. La fenêtre d'aperçu convertit uniquement MarkDown en HTML, mais ne l'assainit pas. Ainsi, la fenêtre d'aperçu aura un élément de script. Cela signifie que la fenêtre d'aperçu est différente du rendu réel sur le serveur.

Je veux résoudre ce problème, alors j’ai besoin d’un désinfectant HTML HTML rapide et sale. Quelque chose de simple avec la liste noire et la liste blanche élément/attribut de base fera l'affaire. Il n'a pas besoin d'être sûr pour XSS car la protection XSS est assurée par l'assainisseur HTML côté serveur.

Ceci est juste pour nous assurer que la fenêtre d'aperçu correspondra au rendu réel 99,99% du temps, ce qui est assez bien pour moi.

Pouvez vous aider? Merci d'avance!

24
Sander Marechal

Vous devriez jeter un coup d'œil à celui recommandé dans cette question Sanitize/Rewrite HTML côté client

Et pour vous assurer que vous n'avez pas besoin de faire davantage sur XSS, veuillez consulter les réponses à cette question/ Comment prévenir les attaques par injection Javascript dans le code HTML généré par l'utilisateur

12
Michael Dillon

Nous avons développé un simple HtmlSantizer et l’avons ouvert ici: https://github.com/jitbit/HtmlSanitizer

Usage

var result = HtmlSanitizer.SanitizeHtml(input);

[Avertissement! Je suis l'un des auteurs!]

1
Alex