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ć.
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ć
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¶meter1=value1&paameter2=value2
Ale w rzeczywistości musi być:
Example.com/123123?parameter1=value1&paameter2=value2
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