Это заблокировано прямо на уровне ядра IIS. В качестве теста я вытащил каждый модуль в IIS, чтобы у него даже не было статического обработчика страниц, и он по-прежнему отображал сообщение об ошибке 400.
Я не верю, что с IIS возможно обойти это. Параметры реестра, которые вы упомянули, предназначены для других типов запрещенных символов. Я не видел рычаг, чтобы изменить эту функциональность.
Какова ваша цель избежать этого? Это расширяет поверхность вашей атаки, и я не могу представить, чтобы законный посетитель был потерян в результате блокировки неполных escape-последовательностей URL.
Обновление 2:
Вот три отличные ссылки на это. И Назим Лала, и Уэйд Хилмо из команды IIS обсуждали этот вопрос в блоге. Также у Скотта Хансельмана есть отличная статья по части строки запросов в .NET:
Обновление:
я проверил с членом команды IIS, чтобы получить авторитетный ответ. Он упомянул, что% считается небезопасным символом согласно RFC 1738 ( http://www.ietf.org/rfc/rfc1738.txt ).
Вот соответствующий текст:
Опасное:
Персонажи могут быть небезопасными по ряду причин. Символ пробела небезопасен, потому что значительные пробелы могут исчезнуть, а незначительные пробелы могут быть введены, когда URL-адреса транскрибируются, набираются или подвергаются обработке программ обработки текста. Символы «<» и «>» небезопасны, поскольку они используются в качестве разделителей вокруг URL-адресов в свободном тексте; знак кавычки ("" ") используется для разграничения URL-адресов в некоторых системах. Символ" # "небезопасен и всегда должен кодироваться, поскольку он используется в World Wide Web и в других системах для разграничения URL-адреса из фрагмента / якоря идентификатор, который может следовать за ним. Символ "%" небезопасен, потому что он используется для кодирования других символов. Другие символы небезопасны, поскольку известно, что шлюзы и другие транспортные агенты иногда изменяют такие символы. Это символы "{", "}", "|", "\", "^", "~", "[", "]" и "` ".
Все небезопасные символы всегда должны быть закодированы в URL. Например, символ «#» должен быть закодирован в URL-адресах даже в системах, которые обычно не имеют дело с идентификаторами фрагментов или якорей, поэтому, если URL-адрес копируется в другую систему, которая их использует, нет необходимости изменять Кодировка URL.
Таким образом, IIS активно блокирует это на уровне ядра, упреждающую меру безопасности, чтобы минимизировать их поверхность атаки.