background-image如果您可以在CSS 属性中注入任意文件(任何扩展名,例如:.js、.html 等),是否可以进行 XSS 攻击?如果是,该怎么做?
XSS - 背景图像 css 属性中的任意文件
不,那是不可能的。
background-image将呈现为图像的值。即使是带有嵌入脚本代码的 SVG,在通过background-image. 所以 XSS 在这里是不可能的(就像任意值<img src="...">永远不会导致 XSS 一样)。
即使你不能仅仅改变一个background-image值而是注入新的 CSS,你也很可能无法获得 XSS。通过 CSS 注入脚本代码expression(...)或url('javascript:...')在现代浏览器中不起作用的技术。换句话说,即使嵌入整个用户控制的 CSS 文件也可能导致严重的侧通道泄漏,但不会导致普通 XSS。
在极端情况下,它实际上可能会导致问题,但不一定是 XSS,也不一定是通过 background-image 样式规则。
极端情况 1:您的浏览器供应商可能在背景图像的渲染引擎中存在漏洞,如果被利用会导致代码被执行。这对于现代浏览器来说是极不可能的,但理论上它是可能的。
极端情况 2:该站点可能有非标准的 CSS 修改,例如支持 eval('') 或其他执行 Javascript 的方式的 EQCSS。在这种情况下,您可以有效地将 Javascript 注入页面。
极端情况 3:如果网站的设计方式可以添加任意 CSS 类和随附规则,则可以编写可以基于 CSS 属性选择器泄漏数据的巧妙规则。例如,某些 javascript 框架添加的包含某些页面内容的部分或全部内容的屏幕阅读器属性可能会与托管在另一个站点上的图像相结合,从而泄露有关属性内容的数据。
极端情况 4: ::before 和 ::after CSS 规则支持“内容”样式规则,该规则可用于在内容之前或之后插入任意字符串。目前有一个草案 ( https://drafts.csswg.org/css-content/ ) 提议将此内容样式规则扩展到之前/之后的限制之外。