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") 

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

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

< > * % & : \ ?

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

    

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

    

Очень распространенный недопустимый символ – % , поэтому, если случайно (атака, веб-сканеры или просто нестандартный браузер) 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), которая есть ? еще раз

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

  • Как добавить амперсанд для значения в файле конфигурации приложения ASP.net/C#
  • Веб-сайты Windows Azure переопределяют мои страницы ошибок 404 и 500 в моем приложении node.js
  • Использовать преобразование web.config Visual Studio для отладки
  • Избегайте наследования web.config в дочернем веб-приложении с использованием inheritInChildApplications
  • Как заставить HTTPS использовать файл web.config
  • Программно зарегистрировать HttpModules во время выполнения
  • Хранить массив строк в appSettings?
  • Шифрование Web.Config
  • Использование другого Web.config в среде разработки и производства
  • Как настроить кеш статического содержимого для каждой папки и расширения в IIS7?
  • Переменные в app.config / web.config
  • Давайте будем гением компьютера.