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

标签 css security xss veracode

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

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

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

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

最佳答案

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

参见 Google Browser Security Handbook获取更多信息。

also ways to get script to run via CSS :

The risk of JavaScript execution. As a little-known feature, some CSS implementations permit JavaScript code to be embedded in stylesheets. There are at least three ways to achieve this goal: by using the expression(...) directive, which gives the ability to evaluate arbitrary JavaScript statements and use their value as a CSS parameter; by using the url('javascript:...') directive on properties that support it; or by invoking browser-specific features such as the -moz-binding mechanism of Firefox.

  • 通过 -moz-binding 执行脚本在 Firefox 2 和 3 上可用。自 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 的一部分,是否允许他们转义样式标签?)。

关于css - 如何在不引入 XSS 的情况下允许用户控制 CSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433993/

相关文章:

html - html中的树结构

jquery - 如何为选项卡菜单中的当前元素添加阴影?

c++ - 在给定代码中查找安全问题

javascript - 阻止对另一个域的请求?

html - 为什么要使用白名单进行 HTML 清理?

xss - 服务器 XSS 与客户端 XSS

html - CSS 日语文本未在跨度中居中

jquery - 固定标题,可滚动正文。没有表怎么办?

symfony - 将安全用户的名称传递给 Symfony2 中 services.yml 中的监听器

security - 如何通过 rsync 安全地接收来自最终用户的文件