Как я могу запретить AntiXSS Sanitizer удалять тег html5 ‹br› из сгенерированного AjaxControlToolkit HtmlEditorExtender html

Я добавил элемент управления ajax Htmleditorextender в свое веб-приложение asp.net, поместив в него дезинфицирующее средство XSS для безопасности XSS, но теперь, когда я извлекаю текст из Htmleditorextender, дезинфицирующее средство удаляет HTML5
из него, и все входные данные поступают в один. Я искал в Интернете и обнаружил, что это происходит потому, что дезинфицирующее средство XSS распознает теги HTML5 как неизвестные небезопасные теги, и поэтому все теги HTML5 удаляются из форматированного HTML-кода htmleditorextender. Теперь я использую htmleditorextender, сделав EnableSanitization="false"
Should Я удаляю дезинфицирующее средство XSS из своего проекта, иначе мне следует использовать

  1. TinyMCE или
  2. CKEditor


но оба они не настроены для загрузки изображений, и пользователь может добавить свой собственный сторонний загрузчик изображений.
Скажите, пожалуйста, как я могу защитить свой сайт от XSS-атак, не теряя теги html, отформатированные в htmleditorextender.


person Community    schedule 09.07.2012    source источник


Ответы (3)


Знаете ли вы, что по этой причине новейший HtmlEditorExtender предлагает альтернативное дезинфицирующее средство? Он называется HtmlAgilityPackSanitizerProvider. Не уверен, включен ли он, если вы используете Nuget для загрузки, но если вы загружаете zip из CodePlex, он содержит папку под названием «SanitizerProviders», которая содержит DLL, необходимые для альтернативного дезинфицирующего средства. Затем вы можете указать альтернативное дезинфицирующее средство (которое включено в загрузку) в файле конфигурации.

Вот ссылка на блог Стивена Вальтера, где он объясняет это: control-toolkit.aspx" rel="nofollow">http://stephenwalther.com/archive/2012/06/25/announcing-the-june-2012-release-of-the-ajax-control-toolkit.aspx< /а>

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

person swannee    schedule 09.07.2012
comment
спасибо за ответ, несколько минут назад я проверил эту проблему в IE10, Safari и Chrome, во всех трех все работает нормально, потому что они используют div для новых абзацев и строк, но когда я нажимаю Enter в htmleditor в firefox, создается тег ‹br› и при отправке html-текста все теги ‹br› удаляются дезинфицирующим средством, и поэтому в Firefox не появляется новый разрыв строки, не могли бы вы помочь мне решить эту проблему. - person ; 09.07.2012
comment
Вы смотрели, что я выложил? Если вы будете следовать инструкциям, которые я опубликовал, это должно решить эту проблему. - person swannee; 10.07.2012
comment
Да, я следил за вашим постом, но он не разрешился в этом потоке stackoverflow кто-то описывал этот вопрос, но никто ему не ответил, почитайте там. Пожалуйста, скажите мне, могу ли я удалить дезинфицирующее средство, рекомендованное Стивеном Вальтером, с помощью Microsoft.security.application.sanitizer(input);, эти два средства делают одно и то же или я иду в неправильном направлении, потому что, если я использую это, я могу сканировать все свои входные данные на предмет XSS-атак. Пожалуйста помогите. - person ; 10.07.2012

в качестве обходного пути для этой проблемы я заменяю все теги <br> неизвестной фразой перед очисткой. и верните их на место в PreRender(). он работает для меня со всеми основными браузерами.

на странице aspx:

<asp:TextBox runat="server" ID="txtSign" TextMode="MultiLine"/>
<ajaxToolkit:HtmlEditorExtender TargetControlID="txtSign" OnPreRender="htmlEditorExtender1_PreRender"  ID="htmlEditorExtender1" runat="server" />

в коде позади:

protected void Page_Load(object sender, EventArgs e)
{
   if (IsPostBack)       
      txtSign.Text = Server.HtmlDecode(txtSign.Text.Replace("&lt;br&gt;", "~_!_~"));           
}

protected void htmlEditorExtender1_PreRender(object sender, EventArgs e)
{
   txtSign.Text = txtSign.Text.Replace("~_!_~", "<br>");
}
person Amin    schedule 24.06.2014

Напишите свое собственное дезинфицирующее средство:

Например, в Интернете есть множество парсеров: Код дезинфицирующего средства из белого списка.

  • Для начала создайте хороший белый список.
  • Белый список — это список допустимых HTML-тегов, например br.
  • Обновите свой белый список, чтобы он соответствовал HTML5 и любым новым стандартам w3c и/или стандартам кодирования вашей организации.
  • Не полагайтесь на поддержку Microsoft при разработке решений.
  • Проявите инициативу как хороший разработчик и мыслите нестандартно.

Пример:

Преимущества. Вы можете очищать/дезинфицировать свойства текста для всех элементов управления вводом.

Общее время на задумку, разработку, модульное тестирование и ощущение любви и безопасности без кошмаров: 2 часа

Надеюсь, это поможет.... :)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: сегодня я не принимал лекарство от орфографии и грамматики. Извиняюсь.

Ссылки:

Imports System.Linq
Imports HtmlAgilityPack
person Mike    schedule 19.09.2012
comment
Дезинфицирующие средства, как правило, являются решаемой проблемой, и лучше использовать существующее решение — оно не только экономит время, но и позволяет избежать ошибок, которые могут привести к уязвимостям, если оно написано неаккуратно. - person ronalchn; 19.09.2012