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

Почему используется URL-адрес, содержащий двоеточие, который рассматривается как "потенциально опасный запрос"?

Кто-то (возможно, бот) отправил запрос со следующим URL-адресом моему веб-бланку ASP.NET 4.0 (работает на IIS 7.0):

http://ipaddress-of-my-applications-domain/bla1.bla2.bla3.bla4.bla5:)

Это вызвало System.Web.HttpException. Я получил регистрационное письмо от ASP.NET HealthMonitoring, которое я настроил, сказав мне:

Потенциально опасное значение Request.Path было обнаружено у клиента (:).

Трассировка стека:

System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

Почему двоеточие в URL-адресе "потенциально опасно"? Какие опасные вещи можно сделать с таким URL? У меня есть дыра в безопасности, о которой я не знаю?

Спасибо за объяснение заранее!

Edit

Я тестировал, что двоеточие в строке запроса (например, http://mydomain.com?Test=9:)) не вызывает этого исключения.

4b9b3361

Ответ 1

В NTFS данный путь к файлу может иметь несколько связанных потоков данных. Помимо основного потока, также известного как $DATA, могут быть другие, обычно используемые для хранения метаданных, таких как маркер интернет-зоны в загруженных файлах.

Альтернативные потоки данных доступны с помощью разделителя двоеточия, например. file.dat:$DATA - альтернативный способ сказать file.dat. Наличие ADS через Интернет вызвало у Microsoft некоторые проблемы с безопасностью в прошлом (например, возврат исходного кода страниц ASP вместо их выполнения), поэтому в качестве меры предосторожности они блокируют использование двоеточия в части пути URL, поскольку часть пути часто сопоставляется с файловой системой (хотя и не в вашем случае). Это вряд ли произойдет из строки запроса, поэтому она не блокируется.

Это далеко не самое плохое ложное положительное подтверждение запроса. Его антиинъекционные функции намного хуже. Я лично всегда отключил бы его, поскольку это глупая сломанная функция, которая никогда не может сделать ваш webapp безопасным; Это может сделать только надлежащее внимание к экранированию строк (и тяжелая санитация всего, что вы планируете использовать в качестве имени файла).

Существуют и другие символы, даже если вы отключите проверку запроса, вы не можете добавить часть пути для целей маршрутизации. В частности, косые черты (%2F, %5C и байтовые последовательности, которые были бы неверными, чередуя последовательности UTF-8, разрешающие их) и нулевой байт. Лучше быть консервативным в отношении того, что вы вложили в пути в целом.

Ответ 2

Я точно не помню, но Internet Explorer привязан к операционной системе, и он смог выполнить некоторые плохие вещи, такие как "con: sss" смог открыть консоль и выполнить некоторые командные команды и т.д., до того, как двоеточие рассматривается как протокол и окна позволяют вам переопределять/создавать новые протоколы, которые могут быть открыты и использованы вашей DLL. Любой, у кого больше опыта работы с com и url-прозвищами, может дать вам очень правильный ответ.

Ответ 3

Это связано с функцией проверки запроса ASP.NET, которая мешает клиентам атаковать ваш сайт. Функция включена по умолчанию.

Следующая ссылка объясняет лучше: http://www.asp.net/learn/whitepapers/request-validation