Исключение «Потенциально опасный запрос. Форма» в универсальном обработчике - PullRequest
3 голосов
/ 04 марта 2011

Я видел эту ошибку раньше, но не могу ее обойти.В этом случае у меня есть страница ASHX, в которой есть простая HTML-форма с текстовым полем, в котором может быть размещен XML.Когда я пытаюсь прочитать форму, я получаю «потенциально опасное значение Request.Form ...».

Поскольку это универсальный обработчик, атрибут «ValidateRequest» недоступен.Однако я уже определил это в web.config:

<location path="xml/MyGenericHandler.ashx">
    <system.web>
      <pages validateRequest="false" />
    </system.web>
</location>

Этот фрагмент предшествует переходу с .NET 3.5 на 4.0, поэтому я предполагаю, что именно здесь возникла поломка.

Любая идеякак обойти эту ошибку для страниц ASHX?

Ответы [ 3 ]

6 голосов
/ 04 марта 2011

Изменения 3.5-4.0, которые вас обрезали, стали некоторыми усиленными функциями безопасности во время выполнения для ASP.NET 4.0. Быстрое решение заключается в применении следующего атрибута:

<httpRuntime requestValidationMode="2.0" />

К сожалению, это открывает все страницы до 2,0 запросов проверки, поэтому я бы сделал это, только если у вас есть относительно небольшая поверхность атаки.

1 голос
/ 04 марта 2011

Хотя это и не прямой ответ на ваш вопрос, я бы сказал, чтобы прочитать этот предыдущий пост.это дает вам способ убедиться, что ошибка не выдается.В каком-то смысле это рискованно, потому что это означает отключение базовой защиты.Тем не менее, ответ вполне обоснован, и в нем четко говорится, что вы должны реализовывать его, только когда вы абсолютно уверены, вы кодируете все выходные данные.

ПотенциальноОпасное значение Request.Form обнаружено клиентом

В качестве примечания, я бы также рекомендовал использовать Microsoft Anti-Xss Library вместо встроенных функций Server.HtmlEncode.

Однако, если вы можете изменить ashx, более простым решением было бы просто изменить код ошибки и добавить инструкцию "if", чтобы не регистрировать ошибки, если сообщение об ошибке содержит строку, которую вы хотите отфильтровать.

0 голосов
/ 15 мая 2017

Вы бы лучше отключили проверку только для своей страницы обработчика:

  <location path="MyGenericHandler.ashx">
    <system.web>
      <!-- requestValidationMode is to avoid HTML-validation of data posted to the handler -->
      <httpRuntime requestValidationMode="2.0"/>
    </system.web>
  </location>

Или используйте это свойство из вашего обработчика, чтобы избежать вызова исключения:

context.Request.Unvalidated.Form
...