Question

Je recherche un désinfectant HTML simple écrit en JavaScript. Il n’est pas nécessaire d’être 100% sécurisé par XSS.

J'implémente Markdown et l'éditeur WMD Markdown (la branche SO 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.

Plus besoin d'un analyseur syntaxique 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 code HTML généré par les utilisateurs dans toutes sortes de langues côté serveur.

MISE À 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 supprimera 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 la désinfecte 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 JavaScript 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’est pas nécessaire qu’il soit sûr pour XSS car la protection XSS est assurée par l’assainisseur HTML côté serveur.

C’est juste pour s’assurer que la fenêtre d’aperçu correspondra au rendu réel 99,99% du temps, ce qui est suffisant pour moi.

Pouvez-vous aider? Merci d'avance!

Était-ce utile?

La solution

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 plus 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

Autres conseils

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

Utilisation

var result = HtmlSanitizer.SanitizeHtml(input);

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

Pour ma fonction, je me suis seulement soucié que la chaîne ne soit pas vide et ne contienne que des caractères alphanumériques. Cela utilise JS simple et pas de troisième bibliothèque ou quoi que ce soit. Il contient un regex long, mais il fait le travail;) Vous pouvez en tirer parti, mais que votre expression rationnelle soit quelque chose de plus semblable '& Lt; script > | < / script > ' (avec des caractères échappés si nécessaire, et moins les espaces). ;)

    var validateString = function(string) {

      var validity = true;

      if( string == '' ) { validity = false; }

      if( string.match( /[ |<|,|>|\.|\?|\/|:|;|"|'|{|\[|}|\]|\||\\|~|`|!|@|#|\$|%|\^|&|\*|\(|\)|_|\-|\+|=]+/ ) != null ) {

          validity = false;
      }

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