Trasowanie adresów URL, obsługa obrazów i " potencjalnie niebezpieczne żądanie.Wartość ścieżki"

Doświadczam tego problemu już od jakiegoś czasu i postanowiłem spróbować raz na zawsze dotrzeć do sedna tego problemu, zamieszczając tutaj Pytanie do jakiejś refleksji. Mam obsługę obrazu w witrynie. Net 4, która znajduje się tutaj:

Https://www.amadeupurl.co.uk/ImageHandler.ashx?i=3604 (aktualna domena usunięta dla Prywatności)

Teraz to działa dobrze i serwuje obraz z serwera www bez problemu, mówię bez problemu, bo jeśli dostęp do adresu URL działa dobrze, obraz ładuje się, nie jest generowany wyjątek. Jednak ktoś odwiedził ten dokładny adres URL wczoraj i wyjątek został podniesiony w następujący sposób:

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

Rozumiem komunikat o błędzie, to nie problem, po prostu nie rozumiem, dlaczego jest generowany tutaj, co gorsza nie jestem w stanie go replikować, jak powiedziałem, klikam link ładuje się obraz, bez wyjątku. Używam URL routingu i zarejestrowałem obsługę, aby być ignorowanym w przypadku, gdy to było powoduje problem z następującym kodem:

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

Nie jestem pewien, dlaczego inaczej dostałbym błąd lub co innego spróbować.

Author: James, 2013-01-23

2 answers

Asp.Net 4.0 + jest wyposażony w bardzo ścisłą walidację wbudowanych żądań, część z nich to potencjalne niebezpieczne znaki w adresie url, które mogą być używane w atakach XSS. Oto domyślne nieprawidłowe znaki w adresie url:

< > * % & : \ ?

Możesz zmienić to zachowanie w pliku konfiguracyjnym:

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

Lub wróć do walidacji. Net 2.0:

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

Bardzo często nieprawidłowym znakiem jest %, więc jeśli przypadkiem (atak, Web-crawlery, lub po prostu jakaś niestandardowa przeglądarka) adres URL jest uciekany, dostajesz to:

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

Zamiast tego:

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

Zauważ, że %3F jest znakiem escape dla ?. Znak jest uważany za nieważny przez Asp.Net request validator and throws an exception:

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

Chociaż w komunikacie o błędzie widzisz niezaklejoną wersję znaku (%3F), która jest ? ponownie

Oto dobry artykuł na żądanie walidacji i jak sobie z tym poradzić

 95
Author: Kamyar Nazeri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-24 07:14:03

Nawet miałem do czynienia z tym problemem, ale dla mnie przypadkowo wpisałem & zamiast ? w URL

Na przykład:

Example.com/123123&parameter1=value1&paameter2=value2

Ale w rzeczywistości musi być:

Example.com/123123?parameter1=value1&paameter2=value2

 0
Author: Bhargav Konda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-26 08:14:16