我们允许在我们的CMS中通过自定义CSS编辑器使用@import
,但我想知道我们是否通过这样做打开了自己的潜在安全风险,它是否可以用于XSS?< / p>
如果是这样,那将如何运作,以及我们如何保护自己免受这种攻击呢?
仅供参考,我们实际上并未将@import
语句留在自定义CSS中,而是通过preg_replace_callback()
将其删除,并通过file_get_contents()
替换为实际目标内容。这样CSS仍然可以缓存而不是阻止页面加载,但可能会让我们有机会过滤使用的URL,甚至是返回的内容。
编辑:
在@duskwuff的快速教育之后,很明显提供服务存在很多潜在的问题,但它看起来像一个类似的问题和答案(这里:https://stackoverflow.com/a/5209050/1058733)表明它可以非常安全地使用HTMLPurifier + CSSTidy用于清理CSS输入,这些输入在file_get_contents()
之后和缓存之前完全适合我们的脚本,另外还可以在保存对象过程中进行良好测量。
答案 0 :(得分:3)
是。 CSS通常不安全 - 有很多方法可用于注入Javascript代码,包括但不限于:
expression()
- 在Internet Explorer 7及更早版本中)behavior
- 在Internet Explorer中)根据网站的性质,通过重新格式化页面内容以显示密码提示,或通过重新格式化或隐藏页面的重要组件来拒绝访问网站,也可以使用不受限制的CSS来窃取用户的密码(例如,隐藏“登录”链接)。
不允许用户输入将在您的网站上使用的CSS,除非您准备完全解析它并根据已批准的属性和选择器的白名单对其进行验证。