В NTFS заданный путь к файлу может иметь несколько связанных потоков данных.Помимо основного потока, также известного как $DATA
, могут быть и другие, обычно используемые для хранения метаданных, таких как маркер зоны Интернета, в загруженных файлах.
Доступ к альтернативным потокам данных осуществляется с помощьюразделитель двоеточия, напримерfile.dat:$DATA
- это альтернативный способ сказать file.dat
.Представление ADS через Интернет вызывало у Microsoft некоторые проблемы с безопасностью в прошлом (например, возвращая исходный код ASP-страниц вместо их выполнения), поэтому в качестве меры предосторожности они блокируют использование двоеточия в части путиURL, так как часть пути часто отображается в файловой системе (хотя не в вашем случае).Это менее вероятно из строки запроса, поэтому не блокируется там.
Это далеко от худшего ложного положительного результата, который генерирует запрос.Его антиинъекционные свойства намного хуже.Я лично всегда отключал бы это, поскольку это глупая сломанная функция, которая никогда не сможет сделать ваш веб-приложение безопасным;это может сделать только должное внимание к экранированию строк (и тщательной очистке всего, что вы планируете использовать в качестве имени файла).
Существуют другие символы, которые, даже если вы отключите Запрос проверки, вы не сможете вставить вчасть пути для целей маршрутизации.В частности, косые черты (%2F
, %5C
и последовательности байтов, которые могут быть недопустимыми в последовательностях UTF-8 с одинаковым разрешением) и нулевой байт.Лучше быть консервативным в отношении того, что вы ставите в общих чертах.