У меня есть приложение Asp.Net Core 3.1
на странице бритвы. Я получаю от пользователя HTML
контент, который будет отображаться в браузере. Это своего рода приложение, похожее на блог, где моему конечному пользователю будет предоставлен редактор WYSIWYG
, а затем HTML
от пользователя будет закодирован и сохранен в базе данных.
Теперь, когда запрашивается страница блога, мне нужно декодировать содержимое HTML
обратно и отображать в браузере. Это делает мой сайт уязвимым для атаки XSS
.
Вот мой HTML
от пользователя,
<p>blog 5</p><script>alert()</script>
Я кодирую это и сохраняю в базе данных,
<p>blog 5</p><script>alert()</script>
Теперь для рендеринга то же самое,
@Html.Raw(System.Net.WebUtility.HtmlDecode(Model.Blog.Content))
Когда страница отображается, отображается окно javascript alert()
.
Если я не декодирую, отображается строка html,
@Html.Raw(Model.Blog.Content)
как показано ниже,
<p>blog 5</p><script>alert()</script>
Я в замешательстве. Я что-то здесь не так делаю? Пожалуйста, помогите и поправьте меня. Мне нужно, чтобы html был безопасным, а также он должен отображаться как html в браузере, а не как html строка вывода.