2015-09-07 35 views
0

我有一个应用程序,可以根据客户端的要求定制HTML模板。它在创建模板时会包含CSS样式脚本,并在生成模板时最后注入模板。通过这种方式,客户/支持人员可以动态生成各种HTML模板。如何在不引入XSS的情况下允许用户控制的CSS?

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

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

请让我知道是否有其他方式做到这一点。

回答

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绑定机制。

    通过 -moz-binding
  • 脚本执行可以在Firefox 2和3。谷歌浏览安全手册不会出现已经被更新了,因为火狐3 This post表示这是现在固定,使得XML文件有可以从您自己的域中读取。 XBL在当前版本的Firefox中似乎不可行。
  • 在Internet Explorer 10及更低版本中,HTML Components允许在CSS中执行脚本。

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

相关问题