加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 防止XSS攻击,仍然使用Html.Raw

发布时间:2020-12-16 09:55:26 所属栏目:asp.Net 来源:网络整理
导读:我有CMS系统,我使用CK编辑器输入数据.现在,如果用户输入 script alert(‘这是一个糟糕的脚本,数据’); / script然后CKEditor完成公平的工作并正确编码并传递 lt; script gt; alert(#39;这是一个糟糕的脚本,数据#39;) lt; / script gt;到服务器. 但是如果用户
我有CMS系统,我使用CK编辑器输入数据.现在,如果用户输入< script> alert(‘这是一个糟糕的脚本,数据’);< / script>然后CKEditor完成公平的工作并正确编码并传递& lt; script& gt; alert(&#39;这是一个糟糕的脚本,数据&#39;)& lt; / script& gt;到服务器.

但是如果用户进入浏览器开发人员工具(使用Inspect元素)并将其添加到其中,如下面的屏幕截图所示,那么这就是所有麻烦开始的时候.现在在从DB中检索回来后,它在浏览器中显示它会显示警告框.

到目前为止,我已经尝试了很多不同的东西

>使用AntiXssEncoder [HttpUtility.HtmlEncode(Contents)]对内容进行编码,然后将其存储在数据库中,当在浏览器中显示时,将其解码并使用MvcHtmlString.Create [MvcHtmlString.Create(HttpUtility.HtmlDecode(Contents))]或Html显示.Raw [Html.Raw(Contents)]正如您所期望的那样,它们都显示JavaScript警报.

我不想替换< script>手动通过代码,因为它是not comprehensive solution(搜索“和编码状态:”).

到目前为止,我已经提到了许多文章(抱歉没有在这里列出所有文章,但只是添加了一些作为证明我在写这个问题之前付出了真诚努力的证据)但是没有一个代码能够显示答案.可能有一些简单的答案,我不是在寻找正确的方向,或者可能不是那么简单,我可能需要使用像Content Security Policy这样的东西.

ASP.Net MVC Html.Raw with AntiXSS protection
Is there a risk in using @Html.Raw?
http://blog.simontimms.com/2013/01/21/content-security-policy-for-asp-net-mvc/
http://blog.michaelckennedy.net/2012/10/15/understanding-text-encoding-in-asp-net-mvc/

要重现我所说的,请转到* this url并在文本框中键入< script> alert(‘这是一个糟糕的脚本,数据’);< / script>然后单击按钮.

*此链接来自Michael Kennedy的博客

解决方法

这并不容易,你可能不想这样做.我建议您使用比HTML更简单的语言来进行最终用户格式化输入吗?那么(我相信)Markdown使用的是Markdown.或者现有的Wiki或其他轻量级 markup languages之一?

如果你允许Html,我会建议如下:

>仅支持固定的Html子集
>在用户提交内容后,解析Html并根据允许的标签和属性的白名单对其进行过滤.
>在过滤和消除任何你不确定的事情时要无情.

有现成的工具和库可以做到这一点.我没有使用它,但我在http://htmlpurifier.org/偶然发现.我认为还有很多其他的. Rick Strahl拥有posted one example for .NET,但我不确定它是否完整.

大约十年前,我试图编写自己的白名单过滤器.它解析并规范化输入的Html.然后,它删除了不在允许的白名单上的任何元素或属性.它工作得很好,但你永远不知道你错过了哪些漏洞.该项目早已死亡,但如果我不得不这样做,我会使用现有的更简单的标记语言而不是Html.

用户有很多方法可以在页面中注入令人讨厌的东西,你必须要凶狠地防止这种情况发生.甚至可以使用CSS将可执行表达式注入页面,例如:

<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>

Here is a page with a list of known attacks会让你夜不能寐.如果您无法过滤并阻止所有这些,则您尚未准备好让不受信任的用户发布公众可查看的格式化内容.

在我自己的过滤器工作的时候,MySpace(哇我老了)被一个名为Samy的XSS蠕虫击中.Samy使用带有javascript有效负载的嵌入式背景Url的Style属性.全是explained by the author.

请注意,您的example page说:

This page is meant to accept and display raw HTML by trusted
editors.

这里的关键问题是信任.如果您的所有用户都是可信任的(例如网站的员工),那么此处的风险就会降低.但是,如果您正在构建论坛或社交网络或约会网站或任何允许不受信任的用户输入其他人可以查看的格式化内容的内容,那么您很难对Html进行清理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读