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

Я пытаюсь выяснить, как справиться с этой ошибкой.

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

Ошибка возникает, когда пользователь вводит теги html или xml (<p> или <HeyImXML>).) и пытается отправить форму.Предполагается, что входные данные вообще не содержат какой-либо разметки, просто обычный текст.

Я использую проверку привязки модели в ASP.NET MVC 2.0 вместе с Html.EnableClientValidation.Это работает нормально, пока не введена разметка.

Как лучше всего избежать появления этого сообщения об ошибке?

Я предполагаю написать новый класс проверки, который проверяет разметку такого типа?

Я хочу отловить ошибку в этом конкретном случае.Для пояснения есть область с формой для siteadmins, которая может вводить разметку, и есть область обычных пользователей, где они не могут вводить разметку.Однако эта страница ошибки появляется, когда обычный пользователь вводит разметку.У меня вопрос, как мне это сделать, чтобы сайт не падал и не отображал страницу с ошибкой.Я хочу отобразить ошибку очистки.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2012

MVC автоматически защитит ваше приложение от некоторых html-инъекций и межсайтовых скриптов (XSS) атак. Вот почему по умолчанию при попытке опубликовать html / javascript вы получите «потенциально опасное значение Request.Form, обнаруженное на клиенте (...)».

Однако иногда мы можем разрешить нашим пользователям публиковать html. Возможно, вы просто захотите позволить пользователям использовать такие символы, как «› », или это может быть связано с тем, что вы реализуете функциональность блога и хотите поддерживать теги, такие как‹ h1 ›,‹ div ›и т. Д. Это можно легко сделать с помощью MVC, отключив проверка запроса.

Добавьте атрибут [ValidateInput(false)] к методу действия в контроллере, который вы вызываете. Это отключит проверку запроса для всей модели по конкретному действию.

Другой способ - добавить атрибут [AllowHtml] к свойству, для которого требуется html в вашей модели.

Эти два атрибута позволят только html / javascript войти в ваше приложение, но MVC все равно будет безопасно выводить их, используя html-кодировку. Если вы хотите вывести его в формате html, вы можете использовать @Html.Raw (@ Model.Content). Но используйте это с осторожностью, поскольку это откроет ваше приложение для атак с использованием межсайтовых скриптов (XSS !)

я нашел это решение из чьего-то блога

см. Также код ниже для вашего решения

вы можете обрабатывать ошибки в вашем приложении следующим образом

1. Настройка раздела режима CustomErros в файле Web.Config вашего приложения

Это списки параметров, которые может принимать атрибут mode.

RemoteOnly: Для удаленных пользователей отображаются общие страницы ошибок. Богатые страницы ошибок показаны для локальных запросов (запросов, сделанных с текущего компьютера). Это настройка по умолчанию.

Выкл .: Богатые страницы ошибок отображаются для всех пользователей, независимо от источника запроса. Этот параметр полезен во многих сценариях разработки, но его не следует использовать в развернутом приложении.

Вкл .: Общие страницы ошибок отображаются для всех пользователей, независимо от источника запроса. Это самый безопасный вариант.

 <System.Web>
  //map all the erros presented in the application to the error.aspx webpage
 <customErrors mode="RemoteOnly" defaultRedirect ="~/error.aspx" />
<System.Web>

2. через файл Global.asax в функции Application_Error

 //handle all the errors presented in the application
  void Application_Error(object sender, EventArgs e){  
 Server.Tranfer("error.aspx");
}

Я надеюсь, что это работает для вас.

из решение stackoverflow

0 голосов
/ 21 сентября 2010

Это было , введенное ранее в ASP.Net , чтобы попытаться , чтобы помочь предотвратить атаки с использованием скриптов. Это не уникально для MVC.

Если вы неЕсли вам не нужна эта функция, вы можете отключить ее и написать свою собственную.

Чтобы отключить проверку запросов на странице , установите для атрибута validateRequest директивы Page значение false:

<%@ Page validateRequest="false" %>

Чтобы отключить проверку запросов для вашего приложения , измените Web.config - установите для атрибута validateRequest раздела <pages /> значение false:

<configuration> 
    <system.web> 
        <pages validateRequest="false" /> 
    </system.web> 
</configuration> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...