Как правильно защитить приложение asp. net core 3.1 от атаки XSS и отобразить HTML с помощью @ Html .Raw () - PullRequest
0 голосов
/ 29 марта 2020

У меня есть приложение Asp.Net Core 3.1 на странице бритвы. Я получаю от пользователя HTML контент, который будет отображаться в браузере. Это своего рода приложение, похожее на блог, где моему конечному пользователю будет предоставлен редактор WYSIWYG, а затем HTML от пользователя будет закодирован и сохранен в базе данных.

Теперь, когда запрашивается страница блога, мне нужно декодировать содержимое HTML обратно и отображать в браузере. Это делает мой сайт уязвимым для атаки XSS.

Вот мой HTML от пользователя,

<p>blog 5</p><script>alert()</script>

Я кодирую это и сохраняю в базе данных,

&lt;p&gt;blog 5&lt;/p&gt;&lt;script&gt;alert()&lt;/script&gt;

Теперь для рендеринга то же самое,

@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 строка вывода.

1 Ответ

1 голос
/ 30 марта 2020

Я бы порекомендовал использовать дезинфицирующую библиотеку HTML. Один из наиболее популярных для. NET:

https://github.com/mganss/HtmlSanitizer

Доступен на Nuget:

https://www.nuget.org/packages/HtmlSanitizer/

Это позволит вам внести в белый список теги, которые вы хотите разрешить. См. Вики для дополнительной документации и примеров.

...