Белый список .NET HTML (анти-xss / межсайтовый скриптинг)

У меня обычная ситуация, когда пользовательский ввод использует подмножество HTML (ввод с помощью tinyMCE). Мне нужна некоторая защита на стороне сервера от XSS-атак, и я ищу хорошо протестированный инструмент, который люди используют для этого. Что касается PHP, я вижу множество библиотек, таких как HTMLPurifier, которые выполняют эту работу, но я не могу ничего найти в .NET.

Я в основном ищу библиотеку, чтобы отфильтровать до белого списка тегов, атрибутов этих тегов и правильно поступать с «сложными» атрибутами, такими как a: href и img: src

Я видел сообщение Джеффа Этвуда по адресу http://refactormycode.com/codes/333-sanitize-html, но я не знаю, насколько он актуален. Имеет ли это какое-либо отношение к тому, что сайт в настоящее время использует? И в любом случае я не уверен, что меня устраивает эта стратегия попытки регулярного выражения действительного ввода.

В этом сообщении в блоге излагается то, что кажется гораздо более убедительной стратегией:

http://blog.bvsoftware.com/post/2009/01/08/How-to-filter-Html-Input-to-Prevent-Cross-Site-Scripting-but-Still-Allow-Design.aspx

Этот метод состоит в том, чтобы фактически проанализировать HTML в DOM, проверить это, а затем восстановить из него действительный HTML. Если синтаксический анализ HTML может разумно обрабатывать искаженный HTML, тогда отлично. Если нет, ничего страшного - я могу потребовать хорошо сформированный HTML, поскольку пользователи должны использовать редактор tinyMCE. В любом случае я переписываю то, что я знаю, является безопасным, правильно сформированным HTML.

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

Такая библиотека существует? Если нет, то каким был бы хороший механизм синтаксического анализа .NET HTML? И какие регулярные выражения следует использовать для дополнительной проверки a: href, img: src? Я упустил здесь что-то еще важное?

Я не хочу переделывать здесь глючное колесо. Конечно, есть несколько часто используемых библиотек. Любые идеи?


person Clyde    schedule 03.08.2009    source источник


Ответы (6)


Что ж, если вы хотите выполнить синтаксический анализ и беспокоитесь о появлении недопустимого (x) HTML, тогда HTML Agility Pack, вероятно, лучше всего использовать для синтаксического анализа. Помните, что это не только элементы, но и атрибуты разрешенных элементов, которые вам нужно разрешить (конечно, вы должны работать с разрешенным белым списком элементов и их атрибутов, а не пытаться удалить вещи, которые могут быть изворотливыми, с помощью черного списка)

Также существует OWASP AntiSamy Project, работа над которым продолжается - у них также есть тестовый сайт, вы можете попробовать XSS

Регулярное выражение для этого, вероятно, слишком рискованно, ИМО.

person blowdart    schedule 22.08.2009
comment
Пакет ловкости - это то, что я в итоге использовал. Кажется, работает хорошо - person Clyde; 24.08.2009

Мы используем библиотеку HtmlSanitizer .Net, которая:

Также на NuGet

person Julian    schedule 02.03.2015

У Microsoft есть библиотека с открытым исходным кодом для защиты от XSS: AntiXSS.

person Tommy Carlier    schedule 22.08.2009
comment
Что ж, AntiXSS - это просто кодирование, это не решение для стриппера или белого списка (пока) - person blowdart; 22.08.2009
comment
Хорошо спасибо. Сам я им не пользовался, так что, наверное, стоит просто рекомендовать то, что знаю. - person Tommy Carlier; 22.08.2009
comment
Хочу отметить, что в нынешнем виде эта библиотека кажется бесполезной (см. Комментарии и обзоры по этой ссылке). - person George Mauer; 07.07.2012
comment
AntiXss поставляется с дезинфицирующим средством из белого списка. Я этим пользуюсь. - person Brandon; 21.02.2015
comment
@Brandon Как добавить содержимое в белый список в AntiXss? Можете ли вы предоставить ссылку или образец для этого? Я пробовал погуглить, но не смог найти модификацию белого списка. :( - person Anish V; 28.03.2016
comment
Аниш Ви: Прошу прощения - это было давно. Я посмотрел на наш код, и мы не смогли изменить используемый им белый список. Думаю, в то время, когда я писал этот комментарий, я имел в виду, что он использует стратегию белого списка. Мне очень жаль, если я дал вам ложную надежду. - person Brandon; 19.04.2016

http://www.microsoft.com/en-us/download/details.aspx?id=28589 Вы можете скачать версию здесь, но я связал ее для полезного файла DOCX. Я предпочитаю использовать диспетчер пакетов NuGet для получения последней версии пакета AntiXSS.

Вы можете использовать сборку HtmlSanitizationLibrary из библиотеки AntiXss 4.x. Обратите внимание, что GetSafeHtml () находится в HtmlSanitizationLibrary в разделе Microsoft.Security.Application.Sanitizer.

person Jason Beck    schedule 23.06.2012

У меня была точно такая же проблема несколько лет назад, когда я использовал TinyMCE.

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

http://www.codeproject.com/KB/aspnet/html-white-listing.aspx

Определение белого списка основано на действительных элементах TinyMCE.

Второй вариант: Microsoft недавно выпустила Anti-XSS Library (V3.0), основанную на белом списке, проверьте это:

Библиотека сценариев Microsoft Anti-Cross Site Scripting V3.0 (Anti-XSS V3.0) - это библиотека кодирования, предназначенная для помощи разработчикам в защите своих веб-приложений ASP.NET от XSS-атак. Он отличается от большинства библиотек кодирования тем, что использует технику белых списков - иногда называемую принципом включений - для обеспечения защиты от XSS-атак. Этот подход работает, сначала определяя допустимый или допустимый набор символов и кодируя что-либо вне этого набора (недопустимые символы или потенциальные атаки). Подход с внесением в белый список дает несколько преимуществ по сравнению с другими схемами кодирования. Новые функции в этой версии библиотеки Microsoft Anti-Cross Site Scripting Library включают: - Расширенный белый список, который поддерживает больше языков - Улучшения производительности - Таблицы данных о производительности (в интерактивной справке) - Поддержка кодировки Shift_JIS для мобильных браузеров - Пример приложения - HTTP-модуль Security Runtime Engine (SRE)

person Community    schedule 22.08.2009

https://github.com/Vereyon/HtmlRuleSanitizer точно решает эту проблему.

У меня возникла эта проблема при интеграции редактора wysihtml5 в приложение ASP.NET MVC. Я заметил, что у него был очень хороший, но простой дезинфицирующий инструмент на основе белого списка, который использовал правила, позволяющие проходить подмножеству HTML. Я реализовал его версию на стороне сервера, которая зависит от пакета HtmlAgility для синтаксического анализа.

Библиотека веб-защиты Microsoft (бывшая AntiXSS), кажется, просто вырывает почти все теги HTML, и, судя по тому, что я читал, вы не можете легко адаптировать правила к подмножеству HTML, которое вы хотите использовать. Так что это был не вариант для меня.

Это средство очистки HTML также выглядит очень многообещающим и будет моим вторым выбором.

person Christ A    schedule 23.02.2015