RequestFiltering не работает для путей имен устройств MS-DOS

Я пытаюсь успокоить сбой сканирования PCI, который мы недавно сделали, в котором говорится:

Microsoft ASP.NET MS-DOS Имя устройства DoS

Описание: Платформа, используемая удаленным веб-сервером, имеет уязвимость типа «отказ в обслуживании». Воздействие. Веб-сервер, работающий на удаленном узле, использует Microsoft ASP.NET и может быть подвержен отказу в обслуживании. Запрос URL-адреса, содержащего имя устройства MS-DOS, может привести к тому, что веб-сервер временно перестанет отвечать на запросы.

Короче говоря, мы посещаем URL-адрес нашего приложения, например /AUX/.aspx, мы получаем ошибку 500.

Я использую RequestFiltering для фильтрации этих запросов и вместо этого возвращаю 404, при этом сервер не пытается обработать запрос.

Выдержка из моего web.config приведена ниже:

<system.webServer>
    <security>
        <requestFiltering>
            <denyUrlSequences>
                <add sequence="/AUX/.aspx" />
            </denyUrlSequences>
        </requestFiltering>
    </security>
</system.webServer>

Однако это не работает, он все еще возвращает 500.

Я ожидаю, что он вернет 404.

Если я добавлю следующий универсальный URL-адрес к denyUrlSequences, то весь сайт выдаст ожидаемый 404.

<add sequence="/" />

Стоит отметить, что рассматриваемое приложение представляет собой приложение MVC, работающее на IIS 7.5 (Windows 2008 R2).


person Alex    schedule 15.01.2016    source источник
comment
Нашел небольшой обходной путь - удалив блок <customErrors>, он работает как положено...   -  person Alex    schedule 15.01.2016


Ответы (2)


Просто надо было решить эту проблему.

Мое решение состояло в том, чтобы отключить страницы ошибок .Net и включить страницы ошибок IIS.

Когда вы перемещаете пользовательскую обработку ошибок с более высокого уровня .Net на более низкий уровень IIS, код ответа HTTP изменяется с 500 на 404.

Тест PCI пройден :-)

person Stephen Hewison    schedule 09.02.2016

Я сам довольно долго с этим боролся. Я думаю, что код ответа 500 является правильным для имен MS-DOS в URL-адресе, и вам не нужно ничего добавлять для запроса фильтрации.

Вы заметите, что получите ошибку 500, если используете любое из имен MS-DOS (https://support.microsoft.com/en-us/kb/74496), ничего не делая с вашей конфигурацией. Однако, если вы добавите RequestFiltering denySequence для чего-то другого, например «foo», вы увидите ошибку 404.5 при переходе к /foo.

Если вы добавите RelaxUrlToFileSystemMapping="true" в https://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.relaxedurltofilesystemmapping(v=vs.110).aspx вместе с вашим запросом, фильтрующим записи denySequence, вы получите 404.5 для имен MS-DOS.

Но отключение конфигурации asp.net по умолчанию только для того, чтобы вы могли получить что-то иное, чем ответ 500 для URL-адреса с именем MS-DOS, является смешным запросом проверки соответствия PCI.

person ASalvo    schedule 22.03.2016