Подтвердить что ты не робот

URL-маршрутизация, обработчик изображений и "потенциально опасное значение Request.Path"

Я уже давно столкнулся с этой проблемой и решил попытаться разобраться с ней раз и навсегда, разместив здесь вопрос для размышлений. У меня есть обработчик изображения на веб-сайте .net 4, расположенном здесь:

https://www.amadeupurl.co.uk/ImageHandler.ashx?i=3604 (фактический домен удален для конфиденциальности)

Теперь это прекрасно работает и без проблем отображает изображение с веб-сервера, я говорю без проблем, потому что, если я получаю доступ к URL-адресу, он отлично работает, загрузка изображения не генерируется. Однако вчера кто-то посетил этот точный URL, и исключение было поднято в следующих строках:

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

Я понимаю сообщение об ошибке, это не проблема, я просто не понимаю, почему она создается здесь, чтобы усугубить ситуацию. Я не могу ее реплицировать, например, я сказал, что нажимаю ссылку на загрузку изображения, исключение, Я использую URL-маршрутизацию и зарегистрировал обработчик для игнорирования, если это вызвало проблему со следующим кодом:

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

Я не уверен, почему еще я получаю ошибку или что еще попробовать.

4b9b3361

Ответ 1

Asp.Net 4.0+ поставляется с очень строгой встроенной проверкой запроса, частью которого являются потенциально опасные символы в URL-адресе, которые могут использоваться в атак XSS. Здесь указаны недопустимые символы по умолчанию:

< > * % & : \ ?

Вы можете изменить это поведение в своем файле конфигурации:

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

Или вернитесь к проверке .Net 2.0:

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

Очень распространенным недопустимым символом является %, поэтому, если случайно (атака, веб-сканеры или просто нестандартный браузер) URL-адрес убегает, вы получаете следующее:

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

вместо этого:

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

Обратите внимание, что %3F является escape-символом для ?. Символ считается недействительным с помощью проверки достоверности запроса Asp.Net и выдает исключение:

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

Хотя в сообщении об ошибке вы видите неизмененную версию символа (% 3F), которая больше ?

Вот хорошая статья о проверке запроса и о том, как с этим бороться

Ответ 2

Даже я сталкивался с этой проблемой, но для себя я случайно набрал & вместо? в URL

например:

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

но на самом деле это должно быть:

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