11
votes

Comment prévenir les attaques XSS lorsque j'ai besoin de rendre HTML à partir d'un éditeur WYSIWYG?

Info de fond non technique: Je travaille pour une école et nous construisons un nouveau site Web à l'aide de Django. Les enseignants qui travaillent pour l'école ne sont pas suffisamment compétents technologiquement pour utiliser un autre langage de balisage tel que Markdown. Nous avons finalement décidé que nous devions utiliser un éditeur WYSIWYG, qui pose des défauts de sécurité. Nous ne sommes pas trop inquiets pour les enseignants eux-mêmes, mais des étudiants plus malveillants qui pourraient obtenir les informations d'identification de l'enseignant.

Info de fond technique: Nous utilisons à l'aide de Django 1.3 et n'a pas encore choisi un éditeur spécifique. Nous nous appuyons vers un JavaScript tel que TinyMCE, mais peut être persuadé d'utiliser tout ce qui permet la sécurité et la facilité d'utilisation. Étant donné que l'éditeur WYSIWYG générera HTML pour être rendu dans le document, nous ne pouvons pas simplement l'échapper.

Quel est le meilleur moyen d'empêcher le code malveillant tout en rendant toujours facile pour les enseignants non techniques d'écrire des messages?


1 commentaires

[Side Commentaire: CKeditor a de belles intégrations de Django, y compris des packages de téléchargement et de navigation d'image. Bon Alt to TinyMCE. Je ne sais pas si cela aide les problèmes XSS cependant!]


3 Réponses :


8
votes

Vous devez analyser le HTML sur le serveur et supprimer toutes les balises et attributs qui ne répondent pas à une liste blanche stricte.
Vous devriez l'analyser (ou au moins le rendu) comme un XML strict pour empêcher les attaquants d'exploiter des différences entre les analysaires flous.

Le whitelist ne doit pas inclure