Использование библиотеки MS Anti XSS для очистки HTML

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

Насколько я понимаю, я могу дезинфицировать HTML, используя AntiXSS.GetSafeHtmlFragment() метод. До тех пор, пока я делаю это перед сохранением HTML в базе данных, мне предоставляется покрытие? Нужно ли что-то делать, когда HTML выводится на веб-странице?

Кроме того, кажется, что белый список является своего рода черным ящиком. Есть ли способ обновить это на основе наших требований?

4 ответа

Решение

Вы должны быть установлены. Хотя, очевидно, это не защитит вас от того, что уже есть в базе данных.

Вы могли бы использовать AntiXSS.GetSafeHtmlFragment() при выводе страницы, а не при сохранении. Но делать при сохранении, вероятно, безопаснее. Вы не хотели бы делать это как при рендеринге, так и при сохранении.

Белый список не редактируется.

Что касается вашего вопроса о "черном ящике": да, это черный ящик, и я понимаю, что вы не можете его редактировать. Если вам нужна дополнительная детализация, ознакомьтесь с проектом AntiSamy.NET.

В последних 4.x библиотеках Anti-XSS GetSafeHtml() и SetSafeHtmlFragment() находятся в классе Sanitizer в Microsoft.Security.Application, который был перемещен в сборку HtmlSanitizationLibrary.

[Устаревшая ссылка: http://www.microsoft.com/en-us/download/details.aspx?id=28589 ] Обновление: похоже, оно было перенесено в пакет NuGet: https://www.nuget.org/packages/HtmlSanitizationLibrary/

Ты почти там. Вы должны убедиться, что вы выбрали правильную кодировку. Например, если пользовательский ввод был введен в URL, вам нужно будет использовать AntiXSS.UrlEncode(), а если он войдет в JavaScript, вы захотите использовать AntiXSS.JavaScriptEncode(). Если вы не можете гарантировать, когда сохраните входные данные, какой будет выходной формат, лучше выполнить очистку во время вывода.

Другие вопросы по тегам