我经常想知道 - 为什么在清理HTML输入时使用白名单而不是黑名单?
有多少偷偷摸摸的HTML技巧可以打开XSS漏洞?显然不允许脚本标签和框架,并且HTML元素中的字段会使用白名单,但为什么不允许大部分内容?
答案 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)
我更喜欢两者兼而有之,我称之为“带有轻松白名单的黑名单”方法:
此黑名单用作轻松白名单中标签/属性的开关。
这个“带有轻松白名单的黑名单”方法可以更轻松地配置清理过滤器。
例如,白名单可以包含所有html5标签和属性。黑名单可以包含标签&amp;要排除的属性。
答案 6 :(得分:0)
你允许的越多,聪明的黑客为你的网页注入一些讨厌的代码就会留下更多的技巧。这就是为什么你想尽可能少的原因。
请参阅Ruben van Vreeland讲座How We Hacked LinkedIn & What Happened Next,详细了解XSS漏洞以及您希望白名单尽可能严格的原因!