Chaque fois qu'un utilisateur publie quelque chose contenant <
ou >
sur une page de mon application web, cette exception est lancée.
Je ne veux pas entrer dans la discussion sur la pertinence de lancer une exception ou de faire planter toute une application web parce que quelqu'un a saisi un caractère dans une zone de texte, mais je recherche une manière élégante de gérer cela.
Attraper l'exception et afficher
Une erreur s'est produite, veuillez revenir en arrière et retaper tout votre formulaire à nouveau, mais cette fois ne pas utiliser <
ne me semble pas assez professionnel.
Désactiver la validation des posts (validateRequest="false"
) évitera certainement cette erreur, mais laissera la page vulnérable à un certain nombre d'attaques.
Idéalement : lorsqu'un post back se produit contenant des caractères HTML restreints, cette valeur postée dans la collection Form sera automatiquement encodée en HTML. Donc, la propriété .Text
de ma zone de texte sera quelque chose & lt; html & gt;
Y a-t-il un moyen de faire cela à partir d'un gestionnaire?
76 votes
Notez que vous pouvez obtenir cette erreur si vous avez des noms d'entités HTML (&) ou des nombres d'entités (') dans votre entrée également.
30 votes
Eh bien, étant donné que c'est ma question, je pense pouvoir définir ce que le point est réellement: faire crasher tout un processus d'application et renvoyer un message d'erreur générique simplement parce que quelqu'un a tapé un '<' est exagéré. Surtout sachant que la plupart des gens vont simplement mettre 'validateRequest=false' pour s'en débarrasser, réouvrant ainsi la vulnérabilité
10 votes
@DrewNoakes : les noms d'entité (&) ne semblent pas poser de problème selon mes tests (effectués en .Net 4.0), bien que les numéros d'entité (') échouent à la validation (comme vous l'avez dit). Si vous désassemblez la méthode System.Web.CrossSiteScriptingValidation.IsDangerousString en utilisant .Net Reflector, vous verrez que le code recherche spécifiquement des balises HTML (commençant par <) et des numéros d'entité (commençant par &#)
9 votes
Créez un nouveau site dans VS2014 en utilisant le projet MVC par défaut et exécutez-le. Cliquez sur le lien d'inscription, ajoutez n'importe quel e-mail et utilisez "
0 votes
TL;DR placer dans web.config
0 votes
Voir aussi ASP.NET 4 Breaking Changes pour certains antécédents.