为什么要使用白名单进行HTML清理?

时间:2010-03-19 08:09:52

标签: html xss whitelist

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

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

7 个答案:

答案 0 :(得分:22)

如果你从白名单中删除一些东西,那么你只需要打破一些不重要的东西,让你首先考虑一下。

如果你把某些东西从黑名单中删除,那么你已经打开了一个很大的安全漏洞。

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

答案 1 :(得分:5)

昨天就读一下。它在feedparser的手册中。

摘录:

  

我调查的越多,案件就越多   我找到Internet Explorer的位置   Windows会看似无害的   标记为代码并轻率执行   它。这就是Universal Feed Parser的原因   使用白名单而不是黑名单。   我有理由相信没有   上的元素或属性   白名单是安全风险。我不是   对所有元素充满信心   我没有明确的属性   调查。而且我没有信心   在我检测字符串的能力方面   在Internet的属性值中   Windows资源管理器将视为   可执行代码。我不会尝试   保持“只是好风格”。所有   样式被剥夺。

如果你只将一些元素列入黑名单,那么就会有一个严重的风险,而忘记重要的元素。当您将某些标签列入白名单时,您知道这些标签是安全的,但是让某些内容可以被滥用的风险会更小。

答案 2 :(得分:4)

即使不允许使用脚本标签和框架标签,您仍然可以放置任何类似的标签

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

许多浏览器都可以使用。

答案 3 :(得分:3)

因为那时你确定不要错过任何事情。通过明确允许某些标签,您显然可以更好地控制允许的内容。

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

  1. 创建一个轻松的“白名单”标签&amp;属性。
  2. 创建“白名单黑名单”,黑名单中的任何标签/属性应该存在于您创建的白名单中,否则会出现错误。
  3. 此黑名单用作轻松白名单中标签/属性的开关。

    这个“带有轻松白名单的黑名单”方法可以更轻松地配置清理过滤器。

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

答案 6 :(得分:0)

你允许的越多,聪明的黑客为你的网页注入一些讨厌的代码就会留下更多的技巧。这就是为什么你想尽可能少的原因。

请参阅Ruben van Vreeland讲座How We Hacked LinkedIn & What Happened Next,详细了解XSS漏洞以及您希望白名单尽可能严格的原因!