【问题标题】:Why use a whitelist for HTML sanitizing?为什么要使用白名单进行 HTML 清理?
【发布时间】:2011-01-29 08:48:26
【问题描述】:

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

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

【问题讨论】:

    标签: html xss whitelist


    【解决方案1】:

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

    一个sn-p:

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

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

    【讨论】:

    • 一个好点,虽然我想不出任何可能导致我不知道的安全风险的事情。你能为这些看似无辜但不知何故可利用的 HTML 元素提供资源吗?
    • @Carson - 是的,但是明天出现的新漏洞呢?如果您有严格的白名单 - 无需更新。如果您有 30 个应用程序的黑名单 - 大量更新
    【解决方案2】:

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

    【讨论】:

    • 没错,</div> 我想也能做到
    • 这并不能真正回答问题,黑名单也可以阻止这些标签。
    • @Andy 可以,但我认为这也增加了一点,即有很多事情需要考虑将某些东西写成安全的东西太容易了。显然样式标签是不允许的,但老实说我可能已经忘记了<object> 甚至存在
    【解决方案3】:

    如果您将某些内容排除在白名单之外,那么您只是破坏了一些对您来说不够重要而无法首先考虑的内容。

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

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

    【讨论】:

    • 啊——我想到了“减少人为错误的余地”方面(当然我使用了白名单),我只是好奇这部分安全性到底有多重要跨度>
    • @Carson:基本部分是“如果浏览器添加新功能”。您无法预测这一点。也有人可能会争辩说,解决人为错误是一般安全的基本概念,因此是“如果您将某些内容从白名单中删除”。
    • 此外,即使您掌握新的浏览器功能,也存在未记录功能的问题(例如,请参阅 Ikke 的回答),这可能会咬到您。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      许多浏览器都可以工作。

      【讨论】:

      • 这是一个很好的例子,但当然,在白名单或黑名单中,“onmouseover”之类的元素字段无论如何都会从标签中删除
      • 没错,我只是想提一下标签,onmouseover 只是我现在想到的一个。
      【解决方案6】:

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

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

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

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

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-09
          • 1970-01-01
          • 1970-01-01
          • 2018-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-04
          相关资源
          最近更新 更多