От клиента было обнаружено потенциально опасное значение Request.Form - PullRequest
1397 голосов
/ 17 сентября 2008

Каждый раз, когда пользователь публикует что-то, содержащее < или > на странице в моем веб-приложении, я получаю это исключение.

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

Перехват исключения и отображение

Произошла ошибка. Вернитесь и введите заново всю форму, но на этот раз, пожалуйста, не используйте <</p>

мне не кажется достаточно профессиональным.

Отключение проверки сообщений (validateRequest="false") определенно позволит избежать этой ошибки, но сделает страницу уязвимой для ряда атак.

В идеале: когда происходит обратная запись, содержащая ограниченные символы HTML, это опубликованное значение в коллекции Form будет автоматически закодировано в HTML. Таким образом, свойство .Text моего текстового поля будет something & lt; html & gt;

Есть ли способ сделать это из обработчика?

Ответы [ 43 ]

0 голосов
/ 30 марта 2018

Я вижу, об этом много написано ... и я не видел, чтобы это упоминалось. Это доступно с .NET Framework 4.5

Параметр ValidateRequestMode для элемента управления является отличным вариантом. Таким образом, другие элементы управления на странице все еще защищены. Изменения web.config не требуются.

 protected void Page_Load(object sender, EventArgs e)
    {
             txtMachKey.ValidateRequestMode = ValidateRequestMode.Disabled;
    }
0 голосов
/ 19 апреля 2016

Используйте Server.HtmlEncode("yourtext");

0 голосов
/ 31 марта 2015

Попробуйте с

Server.Encode

и

Server.HtmlDecode при отправке и получении.

...