Использование библиотеки 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(). Если вы не можете гарантировать, когда сохраните входные данные, какой будет выходной формат, лучше выполнить очистку во время вывода.