【问题标题】:Why is a <style> block considered unsafe markup?为什么 <style> 块被认为是不安全的标记?
【发布时间】:2011-12-15 13:17:53
【问题描述】:

我最近插入PageDown 来过滤来自文本区域的一些 HTML 输入,我注意到它会删除“样式”元素。

我只是想知道为什么这些被认为是不安全的?

【问题讨论】:

  • 我也想知道这个。 Gmail 从 html 电子邮件中去除样式块,我认为这是出于安全原因,但我不知道为什么。
  • 样式元素不应该在 html 正文中,只能在头部。这可能是原因吗?
  • IE 5、6 和 7 支持允许执行任意 javascript 的“表达式:”关键字。让它通过,你就有了一个存储的跨站点脚本漏洞。 dionyziz.com/Joy_XSS#A_word_on_expression.28.29
  • @Cheekysoft 虽然expression: 关键字很危险,但阻止&lt;style&gt; 标签并不能保护您免受此漏洞的影响。为了防止这种情况,您还需要阻止所有 HTML 元素的 style 属性,或手动过滤内联 CSS 属性。或者如您的链接所述,阻止 all 用户输入的 HTML。

标签: html security


【解决方案1】:

IE 有一个特殊的 CSS 功能 allows JavaScript to be embedded within CSS。仅此一项就足以有理由要禁止&lt;style&gt; 标签。

behavior: 表达式也可以输入到style 属性,因此您应该确保从whitelist 中删除style 属性,或将特定样式列入白名单。您应该尝试将样式列入黑名单,因为脚本可以通过多种方式进入样式,还有plans to add more in the future

此外,正如其他人所提到的,您可以使用 CSS 完全改变页面的外观。如果不允许其他标记(例如&lt;form&gt; 标签),我想不出任何可能有害的方式,但如果有足够的创造力,我相信恶意的人可能会想出一些想法。

【讨论】:

    【解决方案2】:

    我的考虑很简单,你应该阻止用户提交&lt;script&gt; 和其他可能操纵你的代码的标签,也许他们这样做的正则表达式也会删除&lt;style&gt; 标签。但不要认为这是理所当然的。

    致谢:http://www.squarefree.com/securitytips/web-developers.html

    您应该确保在用户提交的 HTML 中绝不允许使用的内容,以 保护使用 Firefox 和 IE 的访问者的帐户:

    javascript:, vbscript:, and data: URLs in links, images, anywhere.
    <script> tags, with or without src attributes.
    Event attributes (on*), which contain scripts.
    -moz-binding: or behavior: CSS properties inside <style> elements or style attributes.
    HTML is that is not "well-formed" -- you can't be sure how quirky browsers will parse it. (Example: <b <i>Foo)
    

    【讨论】:

    • “他们的正则表达式”。 :P 使用正则表达式解析任意 HTML 的人需要反复敲打,直到他们承诺停止。任何对解析 HTML 有所了解的人都知道足以避免自己动手。
    【解决方案3】:

    样式表相当强大。它们可以有效地替换页面的全部内容(使用图像,即使浏览器不完全支持content insertion.)。不仅如此,一些较新的浏览器在与 3d 转换相关的漏洞方面的记录也很差。 (据我所知,你不能用恶意制作的 CSS 触发那些,但如果出现这种情况,我不会感到惊讶。)

    (In HTML4 style belongs unequivocally in the head.In HTML5, it can be scoped 仅影响元素的子树,这可能会减少基于 css 的攻击的影响区域,但不会影响它可以造成的损害在那个区域内。)

    【讨论】:

      【解决方案4】:

      如果您要删除任何 HTML 标签,通常最好将标签和属性列入白名单(即,列出您允许的内容,并删除其他所有内容)而不是列入黑名单。 HTML 可能有些复杂,并且仍在不断发展;你怎么知道将来不会有 &lt;stuff&gt; 元素让支持的浏览器运行任意东西?

      话虽如此...与大多数元素不同,样式表可以改变它所嵌入的整个页面的外观。如果不使用 iframe 等,或者解析 CSS 并剥离出来,就无法可靠地限制它违规属性和/或增加特异性。 (例如,IE8 不能依赖 HTML5 规则——它仍然是最常用的浏览器之一。事实上,范围样式元素似乎还没有得到很好的支持。)特别是,理论上可以编写一些 CSS 来获取整个页面并将其完全变成另一个页面。它甚至可以导致本机代码运行(例如,通过 IE 中的behavior)。因此,对于将作为 HTML 输出的内容,无论如何我通常都不允许这样做。对于管理员后端,也许......但不是用于评论表单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 2021-02-04
        • 2014-03-08
        • 2014-03-26
        • 2011-08-13
        • 2012-11-19
        相关资源
        最近更新 更多