2010-02-06 5 views
3

Comment pouvons-nous gérer l'injection javascript dans l'application asp.net mvc (C#)?gérer javascript injection dans asp.net mvc

Je peux utiliser Html.Encode dans ma vue. Mais le problème est que j'ai aussi html à montrer dans la page comme un article de blog.

Je dois supprimer le script entré dans les éléments d'entrée de l'application? Comment puis-je faire cela dans un lieu commun?

Répondre

9

Le « haut niveau » meilleures pratiques pour ce faire est la suivante:

  • utilisateur-entrée magasin la façon dont il a été entré dans le système
  • HTML encode tout d'entrée utilisateur quand il est sortie sur tout Page
  • Utilisez une approche liste blanche « de encode » autorisés caractères HTML, les attributs, les valeurs d'attributs, etc. que vous encodée dans l'étape précédente

HTML utilisateur entrée de codage sur la sortie arrêtera JavaSc ript d'être exécuté sur votre site. Les raisons pour lesquelles vous voulez stocker l'entrée "entrée" est que vous pourriez décider à l'avenir de sortir des données utilisateur dans d'autres formats (PDF, e-mail, JavaScript, RSS, etc.) qui n'ont pas mêmes règles pour l'encodage. Par conséquent, vous devez conserver les données aussi proches que possible de leur forme d'origine. Cela rendra les choses plus faciles à gérer plus tard.

Pour l'encodage HTML, vous pouvez utiliser System.Web.HttpUtility.HtmlEncode(...).

Pour combiner les étapes 2 & 3, vous pouvez utiliser le AntiXSS library de Microsoft. Il fournit des méthodes d'encodage supplémentaires que la classe HttpUtility ne fournit pas pour faciliter votre travail. Je ne savais pas jusqu'à ce que Malcolm a souligné dans les commentaires, que la dernière version de cette bibliothèque comprend une méthode appelée GetSafeHtmlFragment(...) qui supprimera tout JavaScript manuellement. Cela gérera tout le poids de la suppression du code JavaScript saisi par l'utilisateur pour vous. Vous voudrez probablement utiliser GetSafeHtmlFragment et et nonGetSafeHtml, qui est conçu pour encoder des documents HTML entiers.

Note mineure: Lire les commentaires sur la dernière version d'AntiXss (janvier 2012 à l'heure où nous écrivons) si vous trouvez que la fonctionnalité ne fonctionne pas comme prévu. Vous pouvez envisager d'utiliser une ancienne version en fonction de vos besoins, mais sachez que les anciennes versions présentent des failles de sécurité connues. Microsoft has acknowledged the issue and is looking into a solution.

+0

Je n'ai pas entendu parler d'Anixss libray depuis un moment et je ne savais pas qu'il était codé maintenant. Il a un code Javascript. Ma compréhension est que vous devez encoder Javascript si vous voulez utiliser l'entrée en javascript. HttpUtility n'a pas d'encodage Javascript. Donc chaque projet doit avoir cette bibliothèque? –

+0

@Malcolm Tous les projets qui prévoient d'encoder des entrées utilisateur pour une utilisation en JavaScript devraient avoir cette bibliothèque. –

+1

Ceci est nouveau et semble très utilisable: AntiXss.GetSafeHtml (entrée). La méthode possède sa propre liste blanche de balises html. Parfait! –

Questions connexes