Не опасно ли, если я установлю ValidateRequest в false? - PullRequest
4 голосов
/ 02 ноября 2010

Я использую редактор HTML FreeTextBox в некоторых веб-формах в моем проекте asp.net. если я не установил для свойства ValidateRequest значение false, я получаю эту ошибку:

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

Все нормально в папке администратора, потому что только авторизованные пользователи имеют доступ к работе с ним. Но как насчет общедоступных страниц, таких как разделы, где каждый пользователь может оставлять комментарии (используя FreeTextBox для сбора комментариев пользователей)? Не опасно для атаки XSS? Если ответ не Да, то для чего же свойство ValidateRequest?

Ответы [ 4 ]

6 голосов
/ 02 ноября 2010

Нет, вы правы, это потенциально опасно.Идея, лежащая в основе этого, состоит в том, что .net не хочет ограничивать то, что может быть сделано с помощью его элементов управления, но в то же время удаляет многие из возможностей для дыры в безопасности.Свойство ValidateRequest есть, поэтому вы можете сказать ASP.NET: «Эй, не беспокойся об этом. Я собираюсь проверить его сам, потому что ожидаю чего-то, что может показаться тебе опасным».

Он настроен на проверку ответов по умолчанию, поскольку не проверять потенциальные xss-атаки опасно, и лучше получить ошибку проверки, которую вы не осознали, чем взломать ваш сайт.

3 голосов
/ 02 ноября 2010

Да, все в порядке, чтобы отключить проверку запроса.

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

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

1 голос
/ 31 мая 2012

Элемент управления FreeTexBox и «потенциально опасное значение Request.Form было обнаружено клиентом»

Вы можете попробовать другое решение

 if(!this.Page.ClientScript.IsOnSubmitStatementRegistered("Replace"))
{
 string script = @"if (Page_IsValid){FTB_API['" + txtBox.ClientID + @"'].initialized=false;   FTB_API['"  + txtBox.ClientID + @"'].htmlEditor.value=FTB_FreeTextBox.prototype.HtmlEncode( FTB_API['" + txtBox.ClientID + @"'].htmlEditor.value);}";
 this.Page.ClientScript.RegisterOnSubmitStatement(this.Page.GetType(), "Replace", script);
}

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

if(!String.IsNullOrEmpty(yourstring)) txtBox.Text= yourstring.Replace("&gt;", ">").Replace("&lt;", "<").Replace("&amp;", "&").Replace("&quot;", ('"').ToString()).Replace("&#146;", "'");

В этом случае вам не нужно отключать ValidateRequest.Вы также можете заменить символы перед сохранением строки в базе данных.

1 голос
/ 02 ноября 2010

Взгляните на ValidateRequest на MSDN. Это говорит о том, что входные данные сканируются на наличие потенциально опасного содержимого. Это все хорошо, если вы используете только поля ввода и т.п. для открытого текста. Проблема начинается, когда вы хотите, чтобы ваш пользователь предоставил, например. ссылка на какую-то другую страницу или начало хранения дополнительных данных (например, в форме XML) в скрытых полях ввода ValidateRequest не допустит такого рода контента. ValidateRequest - это своего рода приятная функция, которую я почти всегда заканчиваю тем, что отключаю ее, но ее отключение означает, что вам нужно выполнить некоторую проверку вашего ввода самостоятельно. По моему мнению, вы все равно должны всегда проверять ввод самостоятельно.

...