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), которая есть ? еще раз

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

  • Как я могу использовать Web.debug.config на встроенном сервере отладки визуальной студии?
  • Тайм-аут аутентификации форм против тайм-аута sessionState
  • как добавить файлы в процесс преобразования web.config?
  • Ошибка использования раздела, зарегистрированного как allowDefinition = 'MachineToApplication', превышающего уровень приложения
  • Ограничить доступ к определенному controllerу по IP-адресу в бета-версии ASP.NET MVC
  • Измените web.config программно с помощью C # (.NET)
  • Как защитить пароли, хранящиеся в web.config?
  • Шифрование Web.Config
  • Цитата Escape в строке подключения web.config
  • Вложенное приложение ASP.NET в IIS, наследующее родительские настройки конфигурации?
  • Ошибка HTTP 500.19 - Внутренняя ошибка сервера
  • Interesting Posts
    Давайте будем гением компьютера.