有没有什么棘手的问题,某人可以通过用户上传的CSS来损害网站?如果我想让用户上传/共享他们自己的CSS主题到一个网站上,有什么我应该寻找或禁止的东西吗?
编辑:假设我知道如何检查它是否是有效的CSS文件等。我正在寻找需要避免的CSS特定漏洞。
我认为标准的CSS,以标准方式解析是安全的。然而,通过各种非标准扩展CSS是不安全的。
不仅仅是CSS不安全,由于一些浏览器忽略RFC 2616并嗅探内容类型而不是尊重Content-Type
头部,因此有可能欺骗某些浏览器将JavaScript嵌入静态图像文件中。
即使您解决了这些特定问题,也没有阻止浏览器供应商以其他方式欺骗您而您意识不到。
作为一般规则,除非我为每个用户提供自己的子域并确保主站点上的任何cookie都限制在www
主机上,否则我不会允许不受信任的用户上传文件。这使得浏览器看起来每个用户都有自己独立的站点和安全上下文,因此即使他们成功执行代码,也不会危及任何内容。
他们可以包含一个名为.htc的文件,它实际上是Javascript。实际上,它甚至不需要在.htc文件中,你可以使用expression()在CSS中编写Javascript。并且(尽管这是显而易见的),他们可以通过不当地隐藏/显示东西来干扰您的站点。
即使您解析了有效的CSS文件,黑客仍然可以使用诸如:before和:after之类的内容进行恶意攻击。为确保安全性,您需要在验证中将CSS属性和选择器的子集列入白名单。
:before
或 :after
内容可能有什么恶意吗?也许我对“恶意”没有你的想法那样深刻? - Wesley Murch:before
或 :after
中包含一个 url(nefarious_content_or_tracking_trick)
,你也可以使用相同的 url()
技巧来处理 background-image
等。 - mu is too short.css
扩展名的javascript、php、图像或PDF文件,或者只是一个混乱的文本文件。我们该如何解析这个问题?你说得好像这很简单。@mu - 在url()
方面提出了很好的观点,但正如你所指出的那样 - 它不仅限于before/after。 - Wesley Murch在上传文件时,您需要特别小心。如果您进行某种合理性检查,确保它是有效的CSS,那么您就应该没问题了。但是,如果您允许任何旧文件被上传,有人可能会潜入一些JavaScript或其他恶意代码。
实际类型并不具有危害性,但整个上传概念是问题所在,因为它允许攻击者传递您意想不到的负载。
但我认为只要您勾选了安全检查清单并验证您的内容至少是一些CSS,那么您就应该没问题了。
*{display:none}
这样的样式呢?我猜你的意思是暴露敏感数据或将数据发送给第三方,但这里的人似乎只关心让页面变丑或损坏(或者用:after
内容说脏话:D)。 - Wesley Murch*{display:block}
然后看看会发生什么。不太好看。在这个页面上用 Firebug 试试吧。 - Wesley Murch