5 votes

Pourquoi dois-je faire html.encode() ?

Si un utilisateur saisit des données dans un éditeur de texte riche (éditeur minuscule) et soumet des données que je stocke dans une base de données et que je récupère ensuite pour les afficher sur d'autres pages web dynamiques, pourquoi ai-je besoin d'un encodage ici ?

Est-ce que la seule raison est que quelqu'un pourrait coller du javascript dans l'éditeur de texte enrichi ? y a-t-il une autre raison ?

16voto

La sécurité en est la raison.

La raison la plus évidente/commune est Cross-Site-Scripting (XSS). Il s'agit de la cause première des problèmes de sécurité que vous pouvez rencontrer sur votre site.

Le cross-site scripting (XSS) est un type de de vulnérabilité de la sécurité informatique généralement présente dans les applications web qui permet aux attaquants malveillants de d'injecter des script côté client dans les applications pages Web consultées par d'autres utilisateurs. Un site scripting intersite exploité peut être utilisée par des attaquants pour contourner les contrôles d'accès tels que la politique de la même origine. Les scripts intersites scripting effectué sur des sites web représentait environ 80 % de toutes les de sécurité documentées par Symantec en 2007. 1 Leur impact peut varier d'une nuisance mineure à un risque important sécurité, en fonction de la sensibilité des données traitées par le site site vulnérable, et de la nature des mesures mesures d'atténuation de la sécurité mises en œuvre par le propriétaire du site.

En outre, comme le montrent les commentaires ci-dessous, la mise en page de votre site peut également être perturbée.

Vous devez Bibliothèque Microsoft Anti-Cross Site Scripting

Plus de ressources

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

3voto

SLaks Points 391154

Vous faites des erreurs.

Si vous acceptez du texte formaté en HTML à partir de l'éditeur de texte enrichi, vous ne peut pas appelez Html.Encode sinon il codera toutes les balises HTML et vous verrez des balises brutes au lieu d'un texte formaté.

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

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

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

Vous voulez garder le <b> mais supprime (sans l'encoder) la balise <script> étiquette.
De même, vous devez déposer les attributs d'événements en ligne (comme les suivants onmouseover ) et les URLs Javascript (comme <a href="javascript:alert('XSS!');>Dancing Bunnies!</a> )

Vous devez faire passer le code HTML de l'utilisateur par un analyseur XML strict et maintenir une liste blanche stricte de balises et d'attributs lors de l'enregistrement du contenu.

3voto

C. Dragon 76 Points 5066

Je pense que tu confonds "encodage" et "nettoyage".

Si vous voulez accepter texte d'un utilisateur, vous devez encoder avant de le rendre en HTML. De cette façon, le texte

a < b

est codé en HTML comme

a &lt; b

et rendu dans un navigateur HTML (exactement comme l'utilisateur l'a saisi) comme :

a < b

Si vous voulez accepter HTML d'un utilisateur (ce que vous semblez faire dans ce cas), il est déjà au format HTML, donc vous ne voulez pas appeler HTML.Encode à nouveau. Cependant, vous pouvez vouloir l'épurer pour supprimer certaines balises que vous n'autorisez pas (comme les blocs script).

2voto

Abe Miessler Points 34869

La sécurité est la principale raison.

2voto

Non seulement un utilisateur pourrait entrer du code javascript ou toute autre méchanceté, mais vous devez utiliser le codage HTML afin d'afficher certains caractères sur la page. Vous ne voudriez pas que votre page se casse parce que votre base de données contient : "Belle page :->".

De même, si vous saisissez le code dans une base de données, veillez à "aseptiser" les entrées de la base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X