Лучшая практика «высокого уровня» для этого:
- Хранить введенный пользователем способ, которым он был введен в систему
- HTML кодирует весь пользовательский ввод, когда он выводится на любую страницу
- Использование подхода белого списка для "де-кодирования" разрешенных символов HTML, атрибутов, значений атрибутов и т. Д., Которые вы кодировали на предыдущем шаге
HTML-кодирование пользовательского ввода при выводе остановит выполнение JavaScript на вашем сайте.
Причины, по которым вы хотите сохранить пользовательский ввод «как введено», заключаются в том, что в будущем вы можете решить выводить пользовательские данные в других форматах (PDF, электронная почта, JavaScript, RSS и т. Д.), Которые не имеют такой правила для кодирования. В результате вы должны держать данные как можно ближе к их первоначальному виду. Это облегчит дело позже.
Для HTML-кодирования пользовательского ввода вы можете использовать System.Web.HttpUtility.HtmlEncode(...)
.
Чтобы объединить шаги 2 и 3, вы можете использовать библиотеку Microsoft AntiXSS . Он предоставляет несколько дополнительных методов кодирования, которые не предоставляет класс HttpUtility, чтобы облегчить вашу работу. Я не знал, пока Малкольм не указал в комментариях, что последняя версия этой библиотеки включает метод с именем GetSafeHtmlFragment(...)
, который удаляет весь JavaScript вручную. Это позволит справиться со всеми сложностями, связанными с удалением введенного пользователем кода JavaScript. Скорее всего, вы захотите использовать GetSafeHtmlFragment
и , а не GetSafeHtml
, который предназначен для кодирования целых документов HTML.
Небольшое примечание: Прочитайте обзоры последнего выпуска AntiXss (январь 2012 на момент написания этой статьи), если вы обнаружите, что функциональность не работает должным образом. Возможно, вы захотите использовать более старую версию в зависимости от ваших потребностей, но при этом имейте в виду, что в старых версиях есть известные дефекты безопасности. Microsoft признала проблему и ищет решение.