Зачем использовать библиотеку Microsoft AntiXSS?
Когда вы можете просто кодировать данные с помощью HttpUtility.HtmlEncode
, почему мы должны использовать AntiXss.HtmlEncode
?
Почему белый список работает лучше черного списка?
Кроме того, в библиотеке Anti XSS, где я могу указать белый список?
Ответы
Ответ 1
Белые списки всегда более безопасны в том, что черный список - просто подумайте, что будет более безопасным, имея список всех людей, которые не разрешены для вашей стороны или только разрешают тем, кто есть. (В основном черные списки могут обрабатывать атаки, которые очевидны или ранее использовались).
Ответ 2
Вы не можете указать или изменить белый список в библиотеке AntiXSS, что не странно, когда вы думаете об этом. Библиотека AntiXSS по умолчанию кодирует все символы, которые не находятся в следующем диапазоне: 0..9a..zA..Z. Этот набор символов безопасен (и, следовательно, находится в белом списке), и нет необходимости их кодировать. Обратите внимание, что в библиотеке AntiXSS есть разные списки для кодирования javascript, html и urls. Пожалуйста, не используйте html encode для 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) %>
более явным.
Ответ 3
Библиотека AntiXss также включает в себя методы кодирования для таких вещей, как Javascript или атрибуты.
Ответ 4
Я попробовал реализовать библиотеку AntiXss, и она отлично работает, чтобы удалить тег script. Но не удалось сделать это с помощью HTML. Пример ниже
<a href="#" onclick="location.href='http://west-wind.com'; return false;">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>