Отмена проверки запроса с использованием HttpHandler на IIS 7 - PullRequest
3 голосов
/ 13 ноября 2008

У меня есть приложение, которое имеет дело с получением «специальных» символов в своем URL (например, &, +,% и т. Д.). Когда я отправляю запрос в приложение, используя эти символы (конечно, я отправляю их с экранированием), я получаю код ответа «Плохой запрос» с сообщением «ASP.NET обнаружил недопустимые символы в URL». Отслеживание запроса показало мне, что ошибка возникла из «Модуля аутентификации».

Я немного искал и обнаружил, что на каждой странице есть ValidateRequest, и изменение его значения на false решает проблему. К сожалению, я использую Httphandler. Кто-нибудь знает, как остановить проверку запроса с помощью http-обработчика?

Ответы [ 8 ]

2 голосов
/ 23 июня 2010

У меня была такая же проблема, и я заработал, установив validateRequest = "false", а также requestValidationMode = "2.0", как показано ниже. Нет изменений в реестре.

<system.web>
  <httpRuntime requestValidationMode="2.0" />
  ...
  <pages ... validateRequest="false" />
</system.web>
2 голосов
/ 13 октября 2011

Оптовые изменения на уровне приложения или машины не были приемлемы для меня. У меня был только один параметр, который клиент отправлял неправильно, который мне нужно было очистить.

Я обнаружил, что когда выполняется запрос с использованием html или других потенциально опасных элементов в строке запроса, вы можете очистить строку с помощью context.Request.RawUrl, а после очистки строки запроса использовать context.RewritePath(scrubbedUrl).

  1. Первым делом в обработчике получим context.Request.RawUrl
  2. Очистить неверный запрос RawUrl для неверного ввода
  3. context.RewritePath(srubbedUrl)
  4. Прибыль

Кажется, что проверка запроса касается только доступа к context.Request.Params[], поэтому, если вы очищаете и переписываете путь (к тому же пути) до доступа к коллекции Params, вы - золотой.

2 голосов
/ 28 января 2009

Я столкнулся с той же проблемой (создание IHttpHandler, который должен был получать запросы со специальными символами в URL). Я должен был сделать две вещи, чтобы это исправить:

  1. Создайте следующую регистрационную запись DWORD со значением 1: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\VerificationCompatibility

  2. В файле web.config установите для атрибута allowDoubleEscaping элемента requestFiltering значение true.

1 голос
/ 04 мая 2010

Ниже решение работало для меня Создайте следующую регистрационную запись DWORD со значением 1: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\VerificationCompatibility

В web.config установите атрибут allowDoubleEscaping элемента requestFiltering на true.

0 голосов
/ 21 февраля 2018

Начиная с .NET Framework 4.5, вы можете использовать свойство Unvalidated в HttpRequest или HttpRequestBase для доступа к форме, строке запроса и данным URL таким образом, чтобы не запускать проверку запроса. Если вы избегаете доступа к этим значениям любым другим способом (включая вспомогательные методы или другие модули HTTP, работающие по тому же запросу), вам не потребуется ничего другого, чтобы избежать проверки запроса.

0 голосов
/ 19 ноября 2008

Как насчет этого?

<system.web>
    <pages validateRequest="false">
    </pages>
</system.web>
0 голосов
/ 13 ноября 2008

Вы можете удалить все модули с помощью

<httpModules>
  <clear />
</httpModule>

чтобы запрос дошел до вашего обработчика. Или, может быть, вы можете удалить конкретные модули, которые останавливают ваш запрос.

Это список модулей, загруженных по умолчанию в ASP.NET 2.0 из здесь

<httpModules>
     <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
     <add name="Session" type="System.Web.SessionState.SessionStateModule" />
     <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
     <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />
     <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
     <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />
     <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
     <add name="Profile" type="System.Web.Profile.ProfileModule" />
</httpModules>
0 голосов
/ 13 ноября 2008

Вы можете установить validateRequest в false в разделе страниц web.config. Может быть, это работает и для HttpHandlers?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...