我有一个富文本编辑器,可以将 HTML 传递到服务器。然后该 HTML 会显示给其他用户。我想确保该 HTML 中没有 JavaScript。有什么办法可以做到这一点吗?
另外,如果有帮助的话,我正在使用 ASP.NET。
唯一的方法是ensure某些 HTML 标记不包含任何 JavaScript 是为了过滤掉所有不安全的 HTML 标记和属性,以防止跨站脚本 (XSS).
但一般来说没有可靠的方法显式删除所有不安全的元素和属性都按其名称,因为某些浏览器可能会解释您在设计时甚至不知道的元素和属性,从而为恶意用户打开安全漏洞。这就是为什么你最好采取白名单方法而不是列入黑名单一。也就是说,只允许你自己的HTML标签sure是安全的,默认情况下会剥离所有其他内容。事实上,只有一个意外允许的标签就会使您的网站容易受到 XSS 攻击。
白名单(好方法)
请参阅这篇文章HTML 清理,其中提供了一些具体示例来说明为什么应该将其列入白名单而不是黑名单。引用该页面的内容:
以下是潜在危险 HTML 标签和属性的不完整列表:
-
script
,其中可能包含恶意脚本
-
applet
, embed
, and object
,可以自动下载并执行恶意代码
-
meta
,其中可能包含恶意重定向
-
onload
, onunload
,以及所有其他on*
属性,可能包含恶意脚本
-
style
, link
,以及style
属性,可能包含恶意脚本
Here是另一个有用的页面,它建议了一组通常可以安全允许的 HTML 标签和属性以及 CSS 属性,以及推荐的做法。
列入黑名单(通常是不好的方法)
尽管许多网站过去(和目前)都使用黑名单方法,但几乎从来没有真正需要它。 (安全风险总是超过白名单通过授予用户的格式化功能所强制执行的潜在限制。)您需要非常了解它的缺陷。
例如,这一页给出了您可能想要删除的“所有”HTML 标签的列表。只需简单观察一下,您就会发现它包含的元素名称数量非常有限;浏览器很容易包含一个专有标签,无意中允许脚本在您的页面上运行,这本质上是黑名单的主要问题。
最后,我强烈建议您使用HTML DOM 库(比如大家熟知的HTML 敏捷包)对于 .NET,而不是 RegEx 来执行清理/白名单,因为它会更加可靠。 (很可能创建一些非常疯狂的混淆 HTML 来愚弄正则表达式!无论如何,适当的 HTML 阅读器/编写器可以使系统编码变得更加容易。)
希望这能让您大致了解需要设计什么才能完全(或至少最大限度地)防止 XSS,以及在考虑未知因素的情况下执行 HTML 清理的重要性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)