Question

si j'ai un utilisateur d'entrer des données dans un éditeur de texte enrichi (petit éditeur) et la présentation des données que je stocke dans une base de données et la récupération à afficher sur d'autres pages Web dynamiques, pourquoi ai-je besoin coder ici.

La seule raison parce que quelqu'un pourrait coller le javascript dans le riche éditeur de texte? est-il une autre raison?

Était-ce utile?

La solution

La sécurité est la raison.

La raison la plus évidente / commune est Cross-Site-Scripting (XSS). Il se révèle être la cause des problèmes de sécurité que vous auriez pu voir dans votre site.

  

Cross-site scripting (XSS) est un type   de la vulnérabilité de la sécurité informatique   généralement dans les applications Web   qui permet à des attaquants malveillants à   injecter un script côté client dans Web   pages vues par d'autres utilisateurs. Un   exploité cross-site scripting   la vulnérabilité peut être utilisée par des attaquants   à des contrôles d'accès de contournement tels que la   même politique d'origine. Intersite   les scripts effectués sur les sites Web étaient   environ 80% de toute sécurité   vulnérabilités documentées par Symantec   à partir de 2007. 1 Leur impact peut varier   d'une nuisance petite à un important   risque de sécurité, selon la   sensibilité des données traitées par le   site vulnérable, et la nature de tout   atténuations de sécurité mis en œuvre par   Le propriétaire du site.

supplémentaires, comme indiqué ci-dessous dans les commentaires, la mise en page de votre site peut également être vissé vers le haut.

Vous avez besoin Microsoft Anti-Cross Site Scripting Library

Autres ressources

http://forums.asp.net/t/1223756.aspx

Autres conseils

Vous faites des erreurs.

Si vous acceptez le texte au format HTML de l'éditeur de texte enrichi, vous ne peut pas appel Html.Encode, ou il encoder toutes les balises HTML, et vous verrez le balisage brut au lieu de texte mis en forme.

Cependant, vous devez toujours protéger contre les attaques XSS.

En d'autres termes, si l'utilisateur entre le code HTML suivant:

<b>Hello!</b>
<script>alert('XSS!');</script>

Vous voulez garder la balise <b>, mais drop (pas encode) la balise <script>.
De même, vous devez déposer les attributs d'événements en ligne (comme onmouseover) et Javascript URL (comme <a href="javascript:alert('XSS!');>Dancing Bunnies!</a>)

Vous devriez par un analyseur XML strict HTML de l'utilisateur et de maintenir une stricte liste blanche des balises et attributs lors de l'enregistrement du contenu.

Je pense que vous confondez "encoding" avec "lavage."

Si vous voulez accepter text d'un utilisateur, vous devez encode comme HTML avant de vous rendre au format HTML. De cette façon, le texte

a < b

est codée comme HTML

a &lt; b

et rendu dans un navigateur HTML (comme l'utilisateur entré) comme:

a < b

Si vous voulez accepter HTML d'un utilisateur (ce qui sonne comme vous le faites dans ce cas), il est déjà au format HTML, de sorte que vous ne voulez pas appeler Html.Encode à nouveau. Cependant, vous pouvez frotter pour enlever certaines balises que vous ne laissez pas (comme des blocs de script).

La sécurité est la principale raison.

Non seulement un utilisateur peut entrer le code javascript ou une autre espièglerie, vous devez utiliser HTML encode pour afficher certains caractères sur la page. Vous ne voudriez pas votre page pour briser parce que votre base de données contient: "Nice Page: ->".

En outre, si vous entrez le code dans une base de données, assurez-vous de « sanatize » les entrées à la base de données.

Oui, il est d'empêcher d'exécuter JavaScript si quelqu'un chaîne malicieuse entrée dans l'éditeur de texte enrichi. Cependant, le texte brut, il ne JAVASCRIPT votre seule préoccupation, par exemple ceci est un XSS:

<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

Jetez un coup d'oeil ici pour une gamme de différentes options de XSS; http://ha.ckers.org/xss.html

En aparté ..... MVC2 a mis en place de nouvelles fonctionnalités afin de ne plus besoin d'appeler Html.Encode

si vous changez votre syntaxe de vue de

  

à

  

MVC encode automatiquement pour vous. Il est beaucoup plus facile chose / plus rapide. Encore une fois, MVC2 seulement

Une autre raison est que certains quelques balises de fermeture de l'entrée utilisateur peut </div></table> et briser éventuellement la mise en page de votre site Web. Si vous utilisez un make outil d'édition HTML que le html produit est valide avant de l'intégrer dans la page sans codage. Certains analyse syntaxique côté serveur est nécessaire pour le faire. Vous pouvez utiliser HtmlAgilityPack pour le faire.

La principale raison de faire ce que votre suggère est d'échapper à votre sortie. Puisque vous acceptez HTML et que vous voulez le sortir, vous ne pouvez pas faire cela. Ce que vous devez faire est filtrent chose qui l'utilisateur peut faire qui sont précaires, ou du moins pas ce que vous voulez.

Pour cela, permettez-moi de suggérer AntiSamy .

Vous pouvez la démo il .

Qu'est-ce que vous faites a beaucoup de risques Hériter et vous devriez considérer très attentivement.

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