8

我经常想知道——为什么在清理 HTML 输入时使用白名单而不是黑名单?

有多少偷偷摸摸的 HTML 技巧来打开 XSS 漏洞?显然脚本标签和框架是不允许的,并且在 HTML 元素中的字段上会使用白名单,但为什么不允许大部分内容呢?

4

7 回答 7

24

如果您将某些内容从白名单中删除,那么您只是破坏了一些对您来说不够重要的事情。

如果您将某些内容从黑名单中删除,那么您已经打开了一个很大的安全漏洞。

如果浏览器添加了新功能,那么您的黑名单就会过时。

于 2010-03-19T08:14:57.263 回答
5

昨天刚读了一些关于那个的东西。它在feedparser的手册中。

一个片段:

我调查得越多,我发现 Internet Explorer for Windows 将看似无害的标记视为代码并愉快地执行它的情况就越多。这就是 Universal Feed Parser 使用白名单而不是黑名单的原因。我有理由相信白名单上的任何元素或属性都不是安全风险。我对我没有明确调查过的元素或属性一点信心都没有。而且我完全没有信心检测 Windows 版 Internet Explorer 将视为可执行代码的属性值中的字符串。我不会试图保留“只是好的风格”。所有样式都被剥离。

如果您只将某些元素列入黑名单,而忘记了重要的元素,则存在严重的风险。当您将一些您知道是安全的标签列入白名单时,让某些可能被滥用的东西的风险较小。

于 2010-03-19T08:12:34.607 回答
4

即使不允许使用脚本标签和框架标签,您仍然可以像这样放置任何标签

<test onmouseover=alert(/XSS/)>mouse over this</test>

许多浏览器都可以工作。

于 2010-03-19T08:26:27.597 回答
3

因为那样你就确定你不会错过任何东西。通过明确允许某些标签,您显然可以更好地控制允许的内容。

白名单用于大多数与安全相关的主题。想想防火墙。第一条规则是阻止任何(传入)流量,然后只打开应该打开的端口。这使它更加安全。

于 2010-03-19T08:15:48.717 回答
2

因为其他标签可能会破坏页面的布局。想象一下如果有人注入<style>标签会发生什么。<object>标签也很危险。

于 2010-03-19T08:13:09.017 回答
0

我更喜欢两者兼而有之,我称之为“黑名单和宽松的白名单”方法:

  1. 创建一个轻松的标签和属性“白名单”。
  2. 创建一个“白名单的黑名单”,黑名单中的任何标签/属性都应该存在于您创建的白名单中,否则会出现错误。

此黑名单充当宽松白名单中标签/属性的开关。

这种“带有宽松白名单的黑名单”方法使配置清理过滤器变得更加容易。

例如,白名单可以包含所有 html5 标签和属性。而黑名单可以包含要排除的标签和属性。

于 2015-12-02T15:50:26.887 回答
0

您允许的越多,聪明的黑客在您的网页中注入一些讨厌的代码的技巧就越多。这就是为什么您希望尽可能少地允许。

请参阅Ruben van Vreeland的讲座我们如何入侵 LinkedIn 以及接下来会发生什么,以很好地介绍 XSS 漏洞以及为什么您希望白名单尽可能严格!

于 2016-01-12T19:57:25.990 回答