转义富文本编辑器输出

信息安全 Web应用程序 xss 攻击预防 html
2021-08-19 09:54:07
  • 在 Web 应用程序上使用富文本编辑器时,逃避 HTML 实体和防止 XSS 攻击但保留格式(、、、...等)的最佳方法<b><i>什么<u>
2个回答

内容安全策略或 CSP允许您创建用户控制的 HTML 页面,该页面不执行 JavaScript,因此不执行 XSS。

这告诉浏览器不要执行 JavaScript,这比过滤输出要强大得多,并且同时使用两者将提高安全性。HTMLPurifer、antisammy、safehtml等 HTML 过滤库都有许多绕过方法,因此不应将其用作唯一的防御手段。这些是非常复杂的过滤器,复杂性是安全性的最大敌人

在这种情况下,最重要的事情是安全性。我们想从用户或我们自己那里提供一些 HTML 文本,然后将其存储在数据库中以供检查,然后获取并显示在网页中,而不用担心任何类型的攻击和被恶意用户滥用。我已经研究了大约 4 天的最佳方法,并找到了 2 种基本方法。请让我谈谈其他重要的事情,Web 应用程序开发中的许多 IDE 都有一些基本规则来防止或警告发布 HTML,这是针对漏洞的第一道防线。你有两种方法可以通过这个。

1) 编码 HTML 并发布,以便 IDE 找不到任何 HTML 标签并允许数据发布,因此您可以保存它,每次获取它,解码并使用它。您可以使用准备好的类和扩展,也可以自己编写。下面的链接是 .Net 环境或 js/jQuery 中的一些示例,因为我是 .Net 开发人员,并且肯定存在关于其他框架的相同文章:

https://stackoverflow.com/questions/524528/asp-net-mvc-html-encode-new-lines

https://stackoverflow.com/questions/122641/how-can-i-decode-html-characters-in-c

https://stackoverflow.com/questions/1219860/html-encoding-in-javascript-jquery

这是我自己对一些 js/jQuery 函数的测试可以做到这一点:http: //jsfiddle.net/QMaster/4gz7yqcq/

2)关闭一页或整个应用程序的验证,下面的链接是关于.Net的:http: //msdn.microsoft.com/en-us/library/hh882339 (v=vs.110).aspx

但我建议使用 AllowHTML 属性: http: //msdn.microsoft.com/en-us/library/system.web.mvc.allowhtmlattribute (v=vs.118).aspx

并且可以阅读我的答案: https ://stackoverflow.com/questions/4759681/post-html-tag-codes-as-string-with-asp-net-mvc-jquery/25233054#25233054

首先,我认为最好的方法是对 HTML 进行编码并发布、保存然后解码,正如您在我的回答中顶部专业的第二种方式中看到的那样,但是我想如果改变我关于过滤和显示 HTML 标签的规则会怎样。我不知道编码是否在给定的 HTML 中丢失了一些东西。除了我只想存储 html 并且最重要的危险部分是当我取回它并写入响应时,所以我决定通过 [AllowHTML] 属性使用允许仅针对特殊字段发布 HTML。所以我在用户写入时获取 HTML(我可以在标签中做一些限制,就像许多 HTML 编辑器一样)并将其保存到数据库。现在我们有了 HTML,我们需要获取它并在页面中显示。这是攻击者来的地方。HTML 中的任何脚本都可以运行,Frame 可以加载……那么我们能做些什么呢?我们应该清理 HTML,这意味着从危险部分清除它。

https://gist.github.com/ntulip/814428 http://wpl.codeplex.com/ https://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

或者 2) 使用一些 HTML 解析器,然后使用黑名单或白名单删除每个建议危险的元素。一些 HTML Parser 存在缺点和优点,您可以搜索和比较它们。我在http://htmlagilitypack.codeplex.com/中访问了 Html Agility Pack,https://github.com/jamietre/csquery中访问了 CsQuery 或在http://www.awesomium.com/中 支付了 awesomium

Html Agility Pack VS CsQuery 的比较在 http://blog.outsharked.com/2012/06/csquery-performance-vs-fizzler.html

毕竟我读了这篇很棒的文章http://weblog.west-wind.com/posts/2012/Jul/19/NET-HTML-Sanitation-for-rich-HTML-Input并决定用我自己的解析 HTML 和清理职能。现在我使用 HAP,但我计划尽快使用 CsQuery,因为它的性能。

希望这有帮助。