如何在不引入XSS的情况下允许用户控制的CSS?

时间:2015-09-07 08:15:37

标签: css security xss veracode

我有一个应用程序,我可以根据客户端的要求自定义HTML模板。它在创建模板时包含CSS样式脚本,该模板将在生成模板时在最后注入。通过这种方式,客户端/支持人员可以动态生成各种HTML模板。

但是当我为安全扫描提供此项目时,所有CSS注入都被检测为安全漏洞(XSS注入)。我的应用程序本身是基于CSS注入而设计的,因为它需要在没有开发人员参与的情况下创建动态HTML模板。

有没有办法在达到应用程序最终结果的同时防止XSS安全漏洞?

如果有其他方法,请告诉我。

1 个答案:

答案 0 :(得分:0)

允许不受信任的CSS输入是一个XSS漏洞,因为它可用于纠正UI。例如,恶意用户可以通过使用相同的样式和定位来使其文本和内容看起来是来自网站本身的权威文本。

有关详细信息,请参阅Google Browser Security Handbook

also ways to get script to run via CSS

  

JavaScript执行的风险。作为一个鲜为人知的功能,一些CSS   实现允许将JavaScript代码嵌入样式表中。   至少有三种方法可以实现这一目标:使用   表达式(...)指令,它提供了评估的能力   任意JavaScript语句并将其值用作CSS   参数;通过在属性上使用url(' javascript:...')指令   支持它;或者通过调用特定于浏览器的功能   Firefox的-moz绑定机制。

  • Firefox 2和3上提供了通过-moz-binding执行脚本。自Firefox 3以来,Google浏览器安全手册似乎没有更新。This post表示现在已经修复了这一点,以便XML文件必须可以从您自己的域中读取。在当前版本的Firefox中,XBL似乎无法实现。
  • 在Internet Explorer 10及更早版本中HTML Components允许在CSS中执行脚本。

您可以通过implementing an HTML5 sandbox降低不受信任内容的风险。另请考虑implementing a Content Security Policy with sanitisation以防止用户以任何方式逃离您的CSS上下文(我还没有看到您的代码,但我想知道用户是否输入</style>作为CSS的一部分,无论是允许他们逃避样式标签?)。