Зачем использовать библиотеку Microsoft AntiXSS?
Когда вы можете просто кодировать данные, используя HttpUtility.HtmlEncode
почему мы должны использовать AntiXss.HtmlEncode
?
Почему белый список лучше, чем черный?
Кроме того, в библиотеке Anti XSS, где я могу указать белый список?
4 ответа
Белые списки всегда более безопасны, чем черный список - просто подумайте, что будет более безопасно, имея список всех людей, которых не пускают на вашу вечеринку, или только тех, кто есть. (По сути, черные списки могут обрабатывать только те атаки, которые очевидны или использовались ранее).
Вы не можете указать или изменить белый список с библиотекой AntiXSS, что не странно, когда вы думаете об этом. Библиотека AntiXSS по умолчанию кодирует все символы, не входящие в следующий диапазон: 0..9a..zA..Z. Этот набор символов безопасен (и поэтому находится в белом списке), и нет необходимости кодировать их. Обратите внимание, что в библиотеке AntiXSS есть разные списки для кодирования javascript, html и url. Пожалуйста, не используйте HTML-кодирование для URL, потому что у вас будет дыра в безопасности в вашем приложении.
Обратите внимание, что белый список HtmlEncode
работает не так, как в белом списке GetSafeHtmlFragment
, С HtmlEncode
вы говорите "пожалуйста, закодируйте каждый символ, которого нет в белом списке", с GetSafeHtmlFragment
Вы говорите: "Пожалуйста, удалите все теги и атрибуты, которых нет в белом списке".
Когда вы используете ASP.NET 4.0, я бы посоветовал вам не использовать библиотеку AntiXSS (напрямую), а просто использовать встроенные механизмы (такие как HttpUtility) для кодирования HTML. ASP.NET 4.0 позволяет настроить HttpEncoder в файле конфигурации. Вы можете написать свой собственный HttpEncoder
который использует библиотеку AntiXSS (вероятно, будущая версия библиотеки AntiXSS будет содержать HttpEncoder
реализация). Таким образом, все ваше приложение (и все элементы управления ASP.NET и пользовательские элементы управления) будет использовать кодировку белого списка вместо кодировки черного списка.
ASP.NET 4.0 также вводит новый блок кода для закодированного текста. Вы можете использовать Имя: <%: Model.FirstName %>
, Тем не менее, я лично нахожу <%= HttpUtility.HtmlEncode(Model.FirstName) %>
более явно.
Библиотека AntiXss также включает методы Encode для таких вещей, как Javascript или атрибуты.
Я попытался реализовать библиотеку AntiXss, и она хорошо работала для удаления тега скрипта. Но не удалось сделать это с HTML. Смотрите пример ниже
<a href="http://west-wind.com">West Wind</a><br>Hello<br>Please login with the form below before proceeding:<form action="”mybadsite.aspx”"><table><tbody><tr><td>Login:</td><td><input type="text" name="x_x_x_x_x_x_x_x_x_x_x_x_x_login"></td></tr><tr><td>Password:</td><td><input type="text" name="x_x_x_x_x_x_x_x_x_x_x_x_x_password"> </td></tr></tbody></table><input type="submit" value="LOGIN"></form>