web-dev-qa-db-fra.com

URL Routing, Image Handler & "Valeur Request.Path potentiellement dangereuse"

Je rencontre ce problème depuis quelque temps déjà et j’ai décidé d’essayer d’aller au fond des choses une fois pour toutes en postant la question ici pour réflexion. J'ai un gestionnaire d'images sur un site Web .net 4 situé ici:

https://www.amadeupurl.co.uk/ImageHandler.ashx?i=3604 (domaine réel supprimé pour confidentialité)

Maintenant, cela fonctionne bien et sert une image du serveur Web sans problème, je dis sans problème, car si j'accède à l'URL, cela fonctionne bien, l'image se charge, aucune exception n'est générée. Cependant, quelqu'un a visité cette URL exacte hier et une exception a été soulevée dans les termes suivants:

Exception Generated
Error Message:
A potentially dangerous Request.Path value was detected from the client (?).
Stack Trace:
at System.Web.HttpRequest.ValidateInputIfRequiredByConfig() at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

Technical Information:
DATE/TIME: 23/01/2013 03:50:01
PAGE: www.amadeupurl.co.uk/ImageHandler.ashx?i=3604

Je comprends le message d'erreur, ce n'est pas un problème. Je ne comprends tout simplement pas pourquoi il est généré ici. Pour aggraver les choses, je ne parviens pas à le reproduire. J'utilise le routage d'URL et j'ai enregistré le gestionnaire à ignorer au cas où cela poserait un problème avec le code suivant:

routes.Ignore("{resource}.ashx")

Je ne sais pas pourquoi sinon j'obtiendrais l'erreur ou quoi d'autre à essayer.

39
James

Asp.Net 4.0+ est livré avec une validation de requête intégrée très stricte. Une partie de celle-ci comprend les caractères potentiellement dangereux de l’url pouvant être utilisés dans des attaques XSS. Voici les caractères non valides par défaut dans l'URL:

< > * % & : \ ?

Vous pouvez changer ce comportement dans votre fichier de configuration:

<system.web>
    <httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
</system.web>

Ou revenez à la validation .Net 2.0:

<system.web>
    <httpRuntime requestValidationMode="2.0" />
</system.web>

Un caractère invalide très courant est %, donc si par hasard (attaque, web-robots, ou juste un navigateur non standard) l'URL est échappé, vous obtenez ceci:

www.amadeupurl.co.uk/ImageHandler.ashx/%3Fi%3D3604

au lieu de cela:

www.amadeupurl.co.uk/ImageHandler.ashx/?i=3604

Notez que %3F est le caractère d'échappement de ?. Le caractère est considéré comme non valide par le validateur de la demande Asp.Net et lève une exception:

A potentially dangerous Request.Path value was detected from the client (?).

Bien que dans le message d'erreur, vous voyez la version non échappée du caractère (% 3F) qui est ? encore

Voici un bon article sur la validation de la demande et comment y faire face

93
Kamyar Nazeri