2009-09-15 8 views
5

Nous souhaitons empêcher les utilisateurs d'entrer du code html ou javascript dans une zone de texte.Vérification du script dans la zone de texte asp.net

Nous pouvons juste analyser l'entrée et vérifier les parenthèses d'ange. Je me demandais s'il y avait une meilleure façon de faire cela? Pouvez-vous utiliser un validateur d'expressions régulières pour vérifier l'entrée?

+0

Bonne question - il vous montre pensez de la sécurité. +1 – David

Répondre

5

J'ai trouvé que le remplacement des parenthèses d'ange avec des parenthèses anges codées résout la plupart des problèmes. Voici un reference pour toutes les façons dont les gens peuvent cross-site script. Faire une regex pour arrêter toute saveur de HTML et/ou Script est sacrément près impossible.

+1

+1 Ne pas 'vérifier' quoi que ce soit, échapper à la place à la place. Les utilisateurs devraient être en mesure de taper quelques chevrons et ils devraient apparaître comme des équerres normales sur la page comme ceci: < >. La méthode correcte est appelée HtmlEncode (si les contrôles .NET ne s'échappent pas automatiquement pour vous dans votre modèle), et elle affecte également les esperluettes et les guillemets (pour le texte dans les valeurs d'attribut). – bobince

3

Si vous définissez Page.ValidateRequest = true, cela l'arrêtera.

De. Net version 1.1 (je pense) c'est réglé par défaut.

+1

ValidateRequest est complètement, complètement faux, et trahit une malentendu dangereuse du problème. Il est similaire à magic_quotes_gpc de PHP qui dérange beaucoup en ce qu'il essaie de résoudre un problème de sortie (échappement) dans le calque d'entrée. Comme les guillemets magiques, cela casse votre application (par exemple, si elle se trouvait ici à SO, nous ne serions pas du tout en mesure de parler du HTML ''), sans pour autant garantir sa sécurité (la sortie ne vient pas directement de l'entrée et les filtres peuvent être dupés). – bobince

+0

Je ne nie rien de ce que vous dites et dans presque toutes nos applications, il est désactivé globalement et toute entrée/sortie est validée manuellement. Cependant, cette question dit "Nous aimerions empêcher les utilisateurs de saisir du code html ou javascript dans une zone de texte". ValidateRequest le fait. –

+0

En effet. C'est la bonne réponse ... ce n'est peut-être pas la bonne question! – bobince

1

Page.ValidateRequest l'arrêtera sauf si vous l'avez éteint. Cependant, les directives OWASP (et presque toutes les directives de sécurité compétentes) vous indiquent que vous ne devriez PAS essayer de limiter les mauvais caractères dans votre validation, mais que vous devriez plutôt filtrer afin que seuls les caractères spécifiquement autorisés soient utilisés.

http://en.wikipedia.org/wiki/Secure_input_and_output_handling

http://www.owasp.org/index.php/Top_10_2007-A1

Pour les bonnes pratiques de codage sécurisées Je commencerais ici et mettre en signet le site pour référence future. http://www.owasp.org/index.php/Top_10_2007

0

Je suis tombé sur cet utilitaire html. Le code utilise une liste blanche d'étiquettes qui peuvent être entrées. Le script formate ensuite le texte d'entrée et supprime les balises et les scripts qui pourraient être utilisés pour les attaques de script intersite.

Pour vos besoins, vous ne pouviez pas avoir d'étiquettes dans la liste blanche.

Html utilty

Questions connexes