【发布时间】:2013-12-09 19:33:56
【问题描述】:
我们允许通过我们的 CMS 中的自定义 CSS 编辑器使用 @import,但我想知道我们这样做是否已经暴露了潜在的安全风险,它可以用于 XSS 吗?
如果是这样,那将如何发挥作用?此外,我们如何保护自己免受此类攻击?
仅供参考,我们实际上并没有在自定义 CSS 中保留 @import 语句,而是通过 preg_replace_callback() 将它们删除,并通过 file_get_contents() 替换为它们的实际目标内容。这样 CSS 仍然可以被缓存并且不会阻止页面加载,但可能让我们有机会过滤使用的 URL,甚至是返回的内容。
编辑:
在@duskwuff 的快速教育之后,很明显提供该服务存在很多潜在问题,但看起来类似的问题和答案(此处:https://stackoverflow.com/a/5209050/1058733)表明使用 HTMLPurifier + 可以非常安全地完成它CSSTidy 清理 CSS 输入,这将在 file_get_contents() 之后和缓存之前完美地适合我们的脚本,另外在保存对象过程中也是如此。
【问题讨论】:
-
哇!我没有答案..但如果你这么担心,你应该先问...
-
对于它的价值,有人可以在通过 HTTP 提供的文件中放入一个实际的
@import语句。您可能正在用其他恶意内容替换@import。 -
@Leonardo, @Brad FWIW,我在 FYI 中确实提到过,我们有机会过滤/验证返回的代码。也不是说这是一种防御,因为它们不是我选择的基准,但你可以通过他们的自定义 css 编辑器在 Wordpress 中做同样的事情,所以这不像我在重新发明新的方法来搞砸自己。事实上,由于
file_get_contents(),我们过滤和验证的机会是非常独特的。