Почему использованием является 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, который я настроил, говоря мне:

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

Отслеживание стека было:

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

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

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

Править

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

19
задан Slauma 27 July 2010 в 10:34
поделиться

3 ответа

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

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

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

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

20
ответ дан 30 November 2019 в 04:44
поделиться

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

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

0
ответ дан 30 November 2019 в 04:44
поделиться

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

1
ответ дан 30 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: