nkphuc700 Ответов: 1

Предварительно скомпилированный весь сайт все равно получает сообщение об ошибке “потенциально опасный запрос.значение строки запроса было обнаружено от клиента”


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

В моем файле web.config я уже определил два ключа ниже:

<httpRuntime requestValidationMode="2.0" />
<pages validateRequest="false" />


Итак, если я опубликую свой проект (asp.net webform) без использования опции Precompile все будет работать гладко, как я и ожидал.

Однако если я опубликую свой проект с опцией Precompile (precompile all site), то вышеприведенная ошибка всегда будет возникать при отправке формы.

Форма отправки настолько проста, что содержит один элемент управления вводом текста и одну кнопку отправки. И мое мнение текст
<script>alert(1)</script>


Итак, мой вопрос заключается в том, почему эта проблема возникает при сборке precompile publish build? Что-нибудь посоветуете?

Что я уже пробовал:

Поместите два ключа ниже в web.config, но это не решит проблему.
<httpRuntime requestValidationMode="2.0" />
<pages validateRequest="false" />

Richard Deeming

Эта тема с 2010 года[^] предполагает, что validateRequest этот параметр игнорируется при предварительной компиляции сайта, если только вы также не выберете опцию "Разрешить обновление этого предварительно скомпилированного сайта".

Если вам нужно получить доступ к данным запроса без запуска проверки, используйте Request.Unvalidated коллекции. NB: Это может сделать ваш сайт уязвимым для XSS, если вы должным образом не закодируете любые значения, считанные из этих коллекций, прежде чем отображать их.

1 Ответов

Рейтинг:
1

Jochen Arndt

Вы передаете HTML, содержащий script тег из вашей формы. Это потенциально опасно. Цель состоит не в том, чтобы избавиться от сообщения об ошибке, установив некоторые параметры, а в том, чтобы избежать передачи таких опасных данных.

Это может быть сделано путем кодирования данных при подаче и декодирования перед обработкой. Общий метод заключается в использовании HttpServerUtility.Метод HtmlEncode (String) (System.Web)[^]. Но Смотрите также Блог ScottGu - новый синтаксис <%: %> Для вывода кодировки HTML в ASP.NET 4 (и ASP.NET MVC 2)[^].


nkphuc700

HtmlEncode() уже применен в моем коде.

Но ошибка возникает только при сборке публикации с использованием предварительной компиляции. В то время как он обычно работает с публикацией сборки без использования предварительной компиляции.

Jochen Arndt

"HtmlEncode() уже применен в моем коде"

Откуда мне было знать? Вы не упомянули об этом в своем вопросе.

Для предварительно скомпилированной задачи:
См. комментарий Ричардса.