обрабатывать внедрение JavaScript в asp.net MVC - PullRequest
3 голосов
/ 06 февраля 2010

Как мы можем справиться с внедрением JavaScript в приложении asp.net mvc (C #)?

Я могу использовать Html.Encode в моем представлении. Но проблема в том, что у меня есть HTML, чтобы показать на странице, как сообщение в блоге.

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

1 Ответ

9 голосов
/ 06 февраля 2010

Лучшая практика «высокого уровня» для этого:

  • Хранить введенный пользователем способ, которым он был введен в систему
  • 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 признала проблему и ищет решение.

...