Как разрешить пользователю вводить html комментарии - PullRequest
2 голосов
/ 13 ноября 2011

Использование MVC, EF 4.2.Я работаю над приложением, которое имеет раздел комментариев.Прямо сейчас, если пользователь вводит комментарий, содержащий HTML, например,

<b>text</b>

и нажимает «Отправить», я получаю сообщение «Обнаружено потенциально опасное значение Request.Form ...»

  1. Как мне обращаться с HTML на пути в БД?Должен ли я просто раздеть HTML?Или закодировать это?Я попытался server.htmlencode текст, но у меня все еще было то же сообщение об ошибке.

Я прочитал несколько постов по этому вопросу, включая некоторые здесь, в SO - этот и этот

В идеале,Я хотел бы иметь возможность разрешить ограниченное количество тегов html, таких как em strong, a.Можно ли по-прежнему рекомендовать Anti-XSS, HTML Agility, какой-то BB-код или редактор стиля уценки?Я знаю, что у Джеффа есть небольшой код, но ему всего несколько лет.

Ответы [ 4 ]

1 голос
/ 13 ноября 2011

вы можете сделать

[ValidateInput(false)]
public ActionResult foo()
{
}

или вы можете украсить свойство модели с помощью AllowHtml

   public class Foo
    {
        [AllowHtml]
        public string bar{ get; set; }
    }
0 голосов
/ 15 ноября 2011

Мое решение для разрешения html-комментариев следующее:

  1. AllowHtml для свойства CommentText в моем классе комментариев
  2. Разрешить узкое подмножество тегов. Используйте класс Html Sanitizer для очистки Html и встроенного скрипта, который не разрешен через белый список
  3. Затем сохраните результат в БД, как обычно
  4. Во время вывода используйте Html.Raw, чтобы показать Html в комментариях
0 голосов
/ 13 ноября 2011

MVC имеет атрибут, который позволяет указать свойство, разрешающее использование html без полного отключения проверки.Это все еще опасно, но оно может быть ограничено одним свойством, поэтому риск может быть уменьшен.Вот статья MSDN для атрибута AllowHtmlAttribute .Правильное использование атрибута должно быть для украшения соответствующего свойства в вашей модели:

public class MyModel
{
    public MyModel()
    {

    }

    // Some other stuff in here

    [AllowHtml]
    [HttpPost]
    public string MyHtmlString { get; set; }

}
0 голосов
/ 13 ноября 2011

Вам также может понадобиться установить requestValidationMode в вашем web.config:

</system.web>
  <httpRuntime requestValidationMode="2.0" />
</system.web>

См. эту ссылку для более подробной информации.

...