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

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

Я в основном ищу библиотеку для фильтрации до белого списка тегов, атрибутов этих тегов и правильно работает со «сложными» атрибутами, такими как: 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? Я скучаю по чему-то еще важному здесь?

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

Ответы [ 6 ]

3 голосов
/ 03 марта 2015

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

Также на NuGet

3 голосов
/ 22 августа 2009

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

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

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

3 голосов
/ 22 августа 2009

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

2 голосов
/ 23 июня 2012

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

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

1 голос
/ 22 августа 2009

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

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

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

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

Take Two: Оглядываясь назад, Microsoft недавно выпустила библиотеку Anti-XSS на основе белого списка (V3.0), проверьте это:

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

0 голосов
/ 24 февраля 2015

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

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

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

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

...