Après ASP.NET 1.1, la possibilité de vérifier automatiquement s'il y a XSS (attaque de script de site transversale) pour soumettre des formulaires est introduite. Lorsque l'utilisateur essaie d'utiliser une telle entrée pour affecter la page pour retourner le résultat, le moteur ASP.NET déclenchera un httprequestvalidationxceptionin. Par défaut, la page avec le texte suivant sera renvoyée:
Il s'agit d'une fonction de sécurité très importante fournie par ASP.NET. Parce que de nombreux programmeurs n'ont aucune idée de la sécurité, et qu'ils ne connaissent même pas l'existence d'attaques comme les XS, encore moins de gens savent prendre l'initiative de les protéger. Asp.net est sûr par défaut à ce stade. Cela permet aux programmeurs qui ne savent pas grand-chose sur la sécurité pour rédiger des sites Web avec certaines capacités de protection de la sécurité.
Cependant, lorsque j'ai googlé la recherche de la recherche de HttpRequestValidationException ou une demande potentiellement dangereuse . Cette fonctionnalité ne veut pas se soucier de savoir si le site Web du programmeur n'a vraiment pas besoin de cette fonctionnalité. J'avais tellement peur par la vue. La sensibilisation à la sécurité doit toujours être dans l'esprit de chaque programmeur.
Pourquoi de nombreux programmeurs souhaitent-ils interdire ValidateRequest? Il n'est pas nécessaire de le dire. Une autre partie n'est pas réellement que l'utilisateur permet l'entrée de caractères qui provoquent facilement des XS, mais détestent cette forme de rapport d'erreur. Pas l'utilisateur.
Pour les programmeurs qui souhaitent bien gérer ce message d'erreur sans utiliser le message d'erreur d'exception ASP.NET par défaut, veuillez ne pas désactiver ValidateRequest = false.
La bonne façon consiste à ajouter la fonction page_error () à votre page actuelle pour assister à toutes les exceptions qui se produisent pendant le traitement de la page sans traitement. Donnez ensuite à l'utilisateur un message d'erreur juridique. Si la page actuelle ne dispose pas de page_error (), cette exception sera envoyée à Global.Sax application_error () pour le traitement, et vous pouvez également rédiger une fonction de gestion générale des erreurs d'exception. Si aucune fonction de gestion d'exception n'est écrite aux deux endroits, cette page de rapport d'erreur par défaut s'affiche.
Par exemple, il ne faut qu'un morceau de code très court pour faire face à cette exception. Ajoutez ce code à la page de code de code de la page:
| Ce qui suit est un extrait cité: ProtectedVoidPage_error (objectSender, EventArgse) { ExceptionEx = server.getLasterRor (); if (exishttprequestvalidationException) { Response.Write (veuillez entrer une chaîne légale.); Server.ClearError (); // Si ClearError () n'est pas ClearError (), cette exception continuera d'être transmise à Application_Error (). } } |
De cette façon, ce programme peut intercepter l'exception HttpRequestValidationException et peut renvoyer un message d'erreur raisonnable en fonction des souhaits du programmeur.
Ce code est très simple, j'espère donc que tous les amis qui ne sont pas vraiment autorisés à entrer des caractères tels que les utilisateurs, n'interdisent pas cette fonctionnalité de sécurité à volonté. . Peut.
Pour les programmeurs qui interdisent explicitement cette fonctionnalité, ils doivent comprendre ce qu'ils font et doivent vérifier manuellement les chaînes qui doivent être filtrées, sinon votre site déclenchera facilement des attaques de scripts inter-sites.
Comment les pages avec un éditeur de texte riche devraient-elles être gérées?
Si la page a des contrôles avec des éditeurs de texte riches, il conduira inévitablement à la soumission de balises HTML de classe. Dans ce cas, nous devons validateRequest = false. Alors, comment gérer la sécurité?
Selon les conseils de Microsoft, nous devons adopter une politique appelée politique basée sur la sécurité et explicitement autorisée .
Tout d'abord, nous codant pour la chaîne d'entrée avec httutility.htmLencode () et interdisant complètement les balises HTML.
Ensuite, nous remplaçons les balises de sécurité qui nous intéressent et sommes remplacées par Remplacement (). Par exemple, si nous voulons avoir une étiquette, nous la remplacerons explicitement.
L'exemple de code est le suivant:
| Ce qui suit est un extrait cité: voidSubmitBtn_click (objectSender, EventArgse) ... { // Encodant la chaîne d'entrée, afin que toutes les balises HTML ne soient pas valides. StringBuildersB = NewsringBuilder ( Httputility.htmLencode (htmlinputtxt.Text)); // Ensuite, nous permettons sélectivement <b> et <i> sb.replace (& lt; b & gt ;, <b>); sb.replace (& lt; / b & gt ;,); sb.replace (& lt; i & gt ;, <i>); sb.replace (& lt; / i & gt;,); Réponse.Write (sb.toString ()); } |
De cette façon, nous permettons des balises HTML et interdits les balises dangereuses.
Selon les conseils fournis par Microsoft, nous devons soigneusement autoriser les balises HTML suivantes, car ces balises HTML peuvent conduire à des attaques de script inter-sites.
Ce qui suit est un extrait cité:
|
La chose la plus incompréhensible ici est peut-être <Mg>. Cependant, après avoir lu le code suivant, vous devez comprendre son danger.
| Ce qui suit est un extrait cité: <imgsrc = javascript: alert ('bonjour');> <imgsrc = java & # 010; script: alert ('hello');> <imgsrc = java & # x0a; script: alert ('hello');> |
Il est possible de provoquer une exécution JavaScript via la balise <MG> afin que l'attaquant puisse faire tout ce qu'il veut déguiser.
Il en va de même pour <style>:
| Ce qui suit est un extrait cité: <Styletype = text / javascript> ... alert ('bonjour'); </ style> |
| Ce qui suit est un extrait cité: Erreur de serveur dans l'application «/ yourapplicationpath» Une demande potentiellement dangereuse. La valeur de forme a été détectée du client (txtName = <b>). Description: La validation de la demande a détecté une valeur d'entrée du client potentiellement dangereuse et le traitement de la demande a été interdit. En définissant ValidateRequest = false dans la directive de page ou dans la section de configuration. Détails de l'exception: System.Web.httpRequestValidationException: une demande de requête potentiellement dangereuse a été détectée auprès du client (txtName = <b>). .... |