Почему использование URL-адреса, содержащего двоеточие, считается «потенциально опасным запросом»? - PullRequest
19 голосов
/ 27 июля 2010

Кто-то (возможно, бот) отправил запрос со следующим 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? У меня есть дыра в безопасности, о которой я не знаю?

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

Редактировать

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

Ответы [ 3 ]

20 голосов
/ 27 июля 2010

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

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

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

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

1 голос
/ 27 июля 2010

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

0 голосов
/ 27 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...