【问题标题】:Firefox clears all inline style attributes when send header 'Content-Security-Policy'Firefox 在发送标头“Content-Security-Policy”时清除所有内联样式属性
【发布时间】:2019-12-05 16:15:42
【问题描述】:

为什么添加以下标头会导致 Firefox 在浏览器中呈现时只清空所有 style="" 属性?

context.HttpContext.Response.Headers.Add("Content-Security-Policy", "style-src-attr 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'self'");

Chrome 和 Edge 浏览器显示所有内容正确,这意味着样式属性的值未清除为“”。

【问题讨论】:

    标签: asp.net firefox browser-security


    【解决方案1】:

    您使用的指令和语法都是有效的 但根据内容安全政策3级规范,目前处于工作草案状态。

    现代 Chrome 和 Edge 浏览器现在完全支持内容安全策略 2 级规范以及内容安全策略 3 级规范。虽然到目前为止,Firefox 对 Content Security Policy Level 2 和 Level 3 规范有部分支持,这就是 Chrome 和 Edge 浏览器显示所有内容正确但 Firefox 的原因。 (请更新您的 Firefox 版本,然后重新检查)。

    https://caniuse.com/#search=content%20security%20policy%20level

    仅供参考,如果您的浏览器支持,style-src-attr 可以与 style-src 结合使用。如果该指令不存在,用户代理将查找 style-src 指令,如果两者都不存在,则回退到 default-src 指令。

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-attr

    回来回答,现在解决这个问题,您的内容安全策略标题应该如下所示,几乎所有浏览器都支持。

    context.HttpContext.Response.Headers.Add("Content-Security-Policy","style-src 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'self'");
    

    更新:

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src-attr#Browser_compatibility

    这是 Mozilla 中的一个错误,十个月前已经有人报告过,可能会在新的更新中修复。

    https://bugzilla.mozilla.org/show_bug.cgi?id=1529338

    【讨论】:

    • 我使用了您建议的内容安全标头示例,但它不起作用。 html 看起来坏了。
    【解决方案2】:

    首先我无法重现该问题。当我添加您的 Content-Security-Policy 时,Firefox 显示的内联样式很好(v 70.0.1,64 位)。

    然后我用https://cspvalidator.org 测试了你的 CSP,它给出了以下错误

    1:1:无法识别的指令名称:“style-src-attr”。

    1:33:无法识别的指令名称:“script-src-elem”。

    这是有道理的,因为根据网站https://content-security-policy.com/,这些属性不存在

    所以 CSP 应该是

    "style-src 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'self'"
    

    【讨论】:

    • 这两个属性都不存在是正确的。但问题是在“style-src 'unsafe-inline'”中,样式属性也被阻止/清除。根据:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… 我使用的是 FF 68.2.0esr(32 位),这不应该发生。
    • 是的,它没有。至少在我测试过的两个网站上。
    • 我什至做了:style-src 'self' 应该允许来自自己站点的样式属性/标签,但即使这样也不起作用。所有样式都被清除。所以你同意这是错误的?
    • 你的火狐版本是多少?它是否可能有可能干扰的插件?并且 buggy 是有问题的,因为到目前为止只有你有问题,但话说回来,它可能在特定站点的特定版本中是有问题的。有问题的网站可以访问吗?
    • 它也发生在 FF 70.0.1(64 位)上。该网站并非对所有人公开。我可以设置最小标头配置,例如: style-src 'self' 应该允许所有样式标签/属性来自自己的域。即使这样也没有用。您发现哪些 csp 不能像您上面写的那样工作的 2 个网站?
    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 2019-01-18
    • 2020-09-09
    • 2021-08-02
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多