Est-il nécessaire de valeurs HtmlEncode Textbox si ASP .Net Request Validation est activé?
Si ASP.NET la Demande de Validation est activée pour un site, vous devez encore HtmlEncode et HtmlDecode chaîne d'informations vers et à partir de formes simples (p. ex. ASP zones de texte)?
source d'informationauteur IdahoX | 2009-10-02
Vous devez vous connecter pour publier un commentaire.
ASP.NET la Demande de Validation est un hack pour essayer de contourner stupide auteurs cassé programmes. N'écrivez pas cassé programmes.
Toute chaîne de texte à écrire dans une page HTML doit être codé en HTML; c'est une question de régularité, et pas seulement de la sécurité (qui est un sous-ensemble de justesse). Même si la Demande de Validation pourrait comme par magie supprimer d'éventuelles attaques XSS (et c'est donc rien comme c'est le cas), à défaut de HtmlEncode sortie de texte serait encore de vous laisser ouvrir à la production de la malformation de sortie, une déformation de vos données. Dire que j'ai été faire un post sur le forum de parler de certaines variables
a
b
etc
et je voulais dire:Si c'était fait l'écho de la source HTML clair, j'aimerais obtenir:
et peut-être le reste de la page serait trop gras. Oups!
La demande de Validation est faux et ne doit pas être invoqué. Étant activée par défaut et “recommandé pour tous les environnements de production” est triste et me fait sérieusement douter de la santé mentale de la ASP.NET de l'équipe.
Si vous avez écrit votre programme correctement, vous n'avez pas besoin de lui et il sera tout simplement obtenir sur votre chemin. (Par exemple, si utilisé de la SORTE, je ne serais pas capable de faire ce post qui parle de la
<script>
balise.) Si vous n'avez pas écrit votre programme correctement, Validation de la Demande ne va pas à corriger vos trous de sécurité, il va juste faire un peu plus obscur.Vous n'avez pas l'habitude HtmlDecode quoi que ce soit dans une application web. Vous encodez les pour pousser du contenu en HTML, mais lorsque le contenu provient de nouveau à partir d'un formulaire soumis, c'est comme du texte brut, pas codé en HTML.
Zones de texte doit être fine; la définition de leurs
.Text
fait le nécessaire encodage, ce qui rend la chaîne de caractères exacte que vous avait apparaissent dans la zone de texte. Mais. Certaines choses qui regardent comme ils devraient être en HTML codage automatiquement en réalité ne le sont pas. Par exemple:Oh chers.
Text
ne signifie pas toujours le Texte. Parfois, cela signifie réellement HTML. Merci Microsoft, de façon à brouiller les pistes d'un sujet trop grand nombre de personnes déjà du mal à comprendre.Il n'y a pas de danger à partir du texte dans ASP.NET les zones de texte, si la Demande de Validation est activé ou désactivé. Le contrôle de zone de texte code automatiquement les données quand il est affiché dans la zone de texte.
Lors de la sortie des données provenant de l'utilisateur dans autres des lieux, il est important de HTML (ou JavaScript) encoder des données. ASP.NET's la Validation de la Demande ne fournit qu'un niveau minimum de protection. Il n'est pas impénétrable, ou même près de lui. Il est uniquement conçu pour protéger contre la plupart des attaques simples.
Vous avez encore à coder les choses comme vous l'avez sortie sur d'autres parties de votre site.
Modifier
Ce que je veux dire par d'autres endroits, c'est que si l'utilisateur saisit les données dans une zone de texte, à l'aide de la ASP.NET contrôle de Zone de Texte est en sécurité parce que le contrôle de code automatiquement la sortie de sorte qu'il s'affiche en toute sécurité.
Dire, par exemple, vous travaillez avec des StackOverflow de l'utilisateur page info. Lorsqu'un utilisateur choisit son nom d'utilisateur, ils pourraient choisir de saisir quelque chose qui peut être malveillant lors de la sortie dans une autre partie de votre site. Par exemple, mon StackOverflow nom de connexion est affiché en haut de chaque page pour moi, et est également indiqué sur la page "Utilisateurs".
Sur la page Utilisateurs, AJAX est utilisé pour charger les utilisateurs. Quand le JavaScript va à évaluer le nom d'utilisateur, il n'est pas lié par les règles de codage que les balises HTML, afin que je puisse taper quelque chose dans le nom d'utilisateur de la zone de texte qui pourrait provoquer une rupture de comportement quand il est de sortie dans la liste des Utilisateurs.
StackOverflow évidemment encode correctement les données utilisateur lors de l'envoi vers le client, de sorte qu'ils sont sûrs. Avant d'envoyer mon nom d'utilisateur au client, ils ont (sans doute) ont un peu de JavaScript encodage routine qui fait en sorte que mon nom d'utilisateur ne peut pas devenir malveillants lors de l'exécution de code JavaScript.
Vous pouvez également avoir des problèmes si l'utilisant dans une non-ASP.NET contrôle d'entrée. Les balises Input utiliser des attributs pour définir le contenu, de sorte que vous pouvez facilement saisir un texte qui permettrait d'obtenir au-delà de la Demande de vérification de la Validation, mais pourrait permettre à l'utilisateur d'ajouter un malveillant "survol" de l'attribut.