【问题标题】:Why does my Content Security Policy work everywhere but Safari为什么我的内容安全策略在除 Safari 之外的任何地方都有效
【发布时间】:2012-12-02 15:12:55
【问题描述】:

我已将我的安全策略定义为:

default-src 'self'; script-src 'self'; frame-src 'self';  style-src 'self' 'unsafe-inline'; 

(我仍然在几个页面的开头有 CSS)。

我对 Firefox 或 Chrome 没有任何问题(IE 还不支持 CSP),但是,当我尝试在 Safari 中进行测试时,我收到一串错误,例如:

Refused to load style from 'http://localhost/styles/alliance.css' because of Content-Security-Policy.
.
.
.
Refused to load image from 'http://localhost/images/Landing1.jpg' because of Content-Security-Policy.
.
.
.
Refused to load script from 'http://localhost/JQuery/jquery-1.7.2.min.js' because of Content-Security-Policy.

图像应该被 default-src 覆盖,另外两个被列为“Self”,所以我不知道为什么 Safari 不接受我的图像和脚本。我没有 Mac,所以我在 Windows (5.1.7) 上使用 Safari。

有什么想法吗?谢谢!

【问题讨论】:

    标签: web safari content-security-policy


    【解决方案1】:

    Safari 5 在实现 CSP 方面有点落后。 Safari 6 要好得多,但我不认为它是为 Windows 发布的。我认为您只是看到了实现错误。如果 WebKit nightlies 可用于 Windows,那可能是一个很好的测试替代方案。

    不过,老实说,我不建议将 X-WebKit-CSP 标头提供给 Safari 5。Safari 6,是的,但 5 有点太破,无法真正使用。

    另请注意,您可以简化您的政策。 script-srcframe-src 都将退回到 default-srcdefault-src 'self'; style-src 'self' 'unsafe-inline' 应该有同样的效果。

    【讨论】:

    • 谢谢迈克。我看到了有关 Safari 6 如何实现 CSP 的参考资料,而 Safari 5 没有相同效果的评论让我感到疑惑。鉴于 Safari 的 Windows 用户很少,我倾向于忽略它,但知道问题出在他们而不是我仍然会有所帮助。
    • 也感谢您的其他意见。 “额外”的部分是退化的;我最初没有提供 default-src 并且 Chrome 运行良好。然而,Firefox 需要它。
    • Firefox 在完全符合 1.0 规范之前还有一些工作要做,但他们正在快速取得进展。我希望他们会支持不带前缀的 Content-Security-Policy 标头 Soon™,这将使您的事情变得更容易一些。 (Chrome 25 应该支持不带前缀的 header)。
    • @MikeWest:有什么方法可以支持 IE11。我尝试使用 res.setHeader("X-Content-Security-Policy", "sandbox 'allow-same-origin'");以及 IE11 的许多其他内容。但没有任何工作。 IE11 有什么可以解决的吗?
    猜你喜欢
    • 2023-03-22
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多