从“是否可能有漏洞”的角度来看,内联样式和内联JavaScript一样危险。然而,利用这类漏洞的情况要少得多。
CSS可以被恶意使用的方式有几种,其中最常见的方法是注入图像。至少有两种可能发生这种情况:
div {
background-image: url("evil.png");
}
img {
content:url("evil.png").
}
允许用户“强制”渲染图像是极其危险的,因为您可以使用PHP来欺骗图像的内容--您可以从查看PHP图像的人那里挖掘各种信息,例如他们的cookie、浏览器甚至操作系统。更糟糕的是,图像将正确地呈现,所以查看图像的人甚至不会注意到任何可疑的东西。
考虑其他情况,用户能够上传图像,例如在论坛上设置个人资料图片(最终将成为
<img>
)。关键在于用户如何保存图像,以便另一个用户可以呈现它。对于个人资料图片上传,服务器验证通常会阻止用户上传非图像文件或恶意图像。几乎不可能验证作为
background-image
或
content
URL内联注入的图像。
除此之外,我们甚至可以进一步告诉URL本身运行JavaScript:
url('javascript: eval(evil)');
作为你可以想象的,这使得攻击者几乎可以做任何他们想做的事情。
还有一些更罕见的XSS方法,甚至允许使用
behavior
标签和HTC直接执行JavaScript。
body {
behavior: url(evilscript.htc);
}
值得注意的是,
同源策略的使用本身是可以被利用的,因此
并不安全。因此,虽然内联样式稍微提高了速度,但正如您所说,安全和速度之间存在明显的权衡。尽可能避免使用内联样式;希望这可以帮到您!