Вы делаете некоторые ошибки.
Если вы принимаете текст в формате HTML из редактора форматированного текста, вы не можете вызвать Html.Encode
, или он закодирует все теги HTML, и вместо этого вы увидите необработанную разметку форматированного текста.
Однако вам все равно нужно защищаться от XSS.
Другими словами, если пользователь вводит следующий HTML-код:
<b>Hello!</b>
<script>alert('XSS!');</script>
Вы хотите сохранить тег <b>
, но удалить (не кодировать) тег <script>
.
Точно так же вам нужно удалить встроенные атрибуты событий (например, onmouseover
) и URL-адреса Javascript (например, <a href="javascript:alert('XSS!');>Dancing Bunnies!</a>
)
Вы должны запускать HTML пользователя через строгий синтаксический анализатор XML и поддерживать строгий белый список тегов и атрибутов при сохранении содержимого.