如何正确保护 asp.net 核心 3.1 应用免受 XSS 攻击并使用 @Html.Raw() 显示 HTML
How to properly secure asp.net core 3.1 app from XSS attack and display HTML using @Html.Raw()
我有一个 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 字符串输出。
我建议使用 HTML 消毒剂库。 .NET 中比较流行的一种是:
https://github.com/mganss/HtmlSanitizer
它在 Nuget 上可用:
https://www.nuget.org/packages/HtmlSanitizer/
这将允许您将要允许的标签列入白名单。有关其他文档和示例,请参阅 wiki。
我有一个 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 字符串输出。
我建议使用 HTML 消毒剂库。 .NET 中比较流行的一种是:
https://github.com/mganss/HtmlSanitizer
它在 Nuget 上可用:
https://www.nuget.org/packages/HtmlSanitizer/
这将允许您将要允许的标签列入白名单。有关其他文档和示例,请参阅 wiki。