0

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

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

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

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

4

1 回答 1

0

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

有关详细信息,请参阅Google 浏览器安全手册

还有一些方法可以让脚本通过 CSS 运行

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

  • 脚本执行-moz-binding方式在 Firefox 2 和 3 上可用。自 Firefox 3 以来,Google 浏览器安全手册似乎没有更新。这篇文章表明现在已修复此问题,因此必须从您自己的域中读取 XML 文件。XBL 在当前版本的 Firefox 中似乎是不可能的。
  • 在 Internet Explorer 10 和更早版本中, HTML 组件允许在 CSS 中执行脚本。

您可以通过实施 HTML5 沙箱来降低不受信任内容的风险。还可以考虑实施带有清理功能的内容安全策略,以防止用户以任何方式逃离您的 CSS 上下文(我没有看到您的代码,但我想知道用户</style>是否作为 CSS 的一部分输入,是否允许他们逃脱样式标签?)。

于 2015-09-08T10:30:19.277 回答