Как отключить проверку запросов, не устанавливая RequestValidationMode в 2.0? - PullRequest
15 голосов
/ 12 октября 2011

Мы только что обновились до ASP.NET 4.0 и обнаружили, что requestValidation больше не работает. Документы MSDN предполагают, что нам нужно установить requestValidationMode в web.config на 2.0:

  • 4.0 (по умолчанию). Объект HttpRequest внутренне устанавливает флаг, который указывает, что проверка запроса должна запускаться всякий раз, когда Доступ к любым данным HTTP-запроса. Это гарантирует, что запрос проверка запускается до того, как данные, такие как файлы cookie и URL-адреса доступ во время запроса. Настройки проверки запроса элемент pages (если есть) в файле конфигурации или @ Page директивы на отдельной странице игнорируются.
  • 2,0. Проверка запросов включена только для страниц, а не для всех HTTP-запросов. Кроме того, запрос проверки параметров страниц элемент (если есть) в файле конфигурации или директивы @ Page на отдельной странице используются для определения того, какая страница запрашивает проверки.

Это будет работать для нас, однако я немного озадачен. Похоже, мы переводим это в устаревший режим совместимости. Конечно, должно быть возможно поведение 4.0, но все же есть возможность отключить это на странице?

Ответы [ 4 ]

26 голосов
/ 02 июня 2012

Я нашел способ достичь этого, не меняя RequestValidationMode на 2.0 для всего сайта:

Вы можете создать подкаталог для страницы, для которой вы хотите отключить проверку запроса, и добавить новый web.config.в этот каталог с параметром RequestValidationMode, установленным на 2.0, таким образом, только этот каталог будет работать в режиме 2.0, не затрагивая все другие запросы, которые будут работать в режиме 4.0.

Я думаю, что вы можете добавить раздел местоположения в свою главную сеть.конфиг, указывающий только одну страницу, но я еще не проверял это.Примерно так:

<location path="Admin/Translation.aspx">
    <system.web>
        <httpRuntime requestValidationMode="2.0"/>
    </system.web>
</location>

Надеюсь, это поможет вам, как мне помогли!

4 голосов
/ 24 марта 2012

Лучше всего переопределить тип requestValidation с помощью собственного кода:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN ссылка

3 голосов
/ 12 ноября 2011

Похоже, что это невозможно включить или выключить для страницы в requestValidationMode 4.0.

В этом техническом документе рассказывается о серьезных изменениях в .Net 4.0, одним из которых, похоже, является. Даже технический документ предлагает вернуться к requestValidationMode 2.0

Чтобы вернуться к поведению функции проверки запросов ASP.NET 2.0, добавьте следующий параметр в файл Web.config:

<httpRuntime requestValidationMode="2.0" />

Хотя также полезно

что вы анализируете любые ошибки проверки запросов, чтобы определить, обращаются ли существующие обработчики, модули или другой пользовательский код к потенциально небезопасным входам HTTP, которые могут быть векторами атак XSS.

без каких-либо указаний о том, как наилучшим образом решить эти проблемы

0 голосов
/ 12 октября 2011

Вы можете установить ValidateRequest на false в директиве страницы:

<%@ Page ValidateRequest="false" %>
...