Использование ValidateRequest="true" с HttpHandlers
У меня есть обработчик HTTP, настроенный в разделе HttpHandlers моего web.config следующим образом:
<add path="myNamespace.myHandler.axd" verb="*" type="myNamespace.myHandler, myNamespace" validate="false"/>
Сканирование PCI выявило уязвимость в этом обработчике, которая открывает его для атак XSS. По сути, вы можете передать тег через строку запроса, и httphandler выгружает тег прямо в ответ в необработанном формате - ой!
У меня нет доступа к исходному коду для этого обработчика, поэтому я пытался закрыть эту уязвимость, используя asp.net со следующим тегом:
<location path="myNamespace.myHandler.axd">
<system.web>
<pages validateRequest="true">
</pages>
</system.web>
</location>
Это, однако, не работает. Строка запроса не проверяется, а теги все еще проходят.
Я использую IIS7 с asp.net 3.5.
Кто-нибудь может помочь?
Ура, Пэт
1 ответ
Насколько я знаю, в asp.net 3.5 нет простого способа включить проверку запросов для универсального обработчика http с использованием параметров конфигурации. Однако в.net 1.1 были введены некоторые методы проверки, которые, как я считаю (не уверен на 100%), являются теми же критериями, которые использовались при проверке запросов по умолчанию.
В 4.0 введена стандартная проверка запросов по всем направлениям с возможностью вернуться к настройкам 2.0.
На мой взгляд, у вас есть два варианта:
- ручная обработка проверки где-то в коде
- обновить до.net 4.0 и получить преимущество от проверки запросов по умолчанию