内容安全策略框架祖先。 iframe 不会在 iOS10 中加载内容

Posted

技术标签:

【中文标题】内容安全策略框架祖先。 iframe 不会在 iOS10 中加载内容【英文标题】:Content Security Policy frame-ancestors. Iframe wont load content in iOS10 【发布时间】:2016-09-28 08:40:53 【问题描述】:

我们的 Cordova 应用不会在 ios 10 上加载 iframe 内容。

我们有一些 iframe 显示来自应用内网页的某些信息,因此我们不必复制它们。

在以下任何 iOS 版本中都可以正常工作。但是自从我们的设备更新后,应用程序拒绝加载资源。

Refused to load http://.../.../X.html because it does not appear in the frame-ancestors directive of the Content Security Policy

我尝试编辑我的元 Content-Security-Policy 标记以允许来自此资源,但这不起作用。我想这个问题是关于网络服务器告诉我的应用程序/浏览器不允许这个来源的,但遗憾的是我对那个话题没有那么深入。我所知道的是,Web 服务器将 X-Frame-Options 设置为 SAMEORIGIN,但这也应该为其他 iOS 版本禁用它..

那么在这种情况下如何绕过安全配置,让它像在早期版本的 iOS 中一样工作?

如果您需要更多信息,请告诉我,我不知道我是否遗漏了什么。

【问题讨论】:

【参考方案1】:

我所知道的是网络服务器将 X-Frame-Options 设置为 SAMEORIGIN,但这也应该为其他 iOS 版本禁用它。

除了现有的标头:

X-Frame-Options: SAMEORIGIN

添加其内容安全策略等效项:

Content-Security-Policy: frame-ancestors 'self'

请牢记以下注意事项:

关于支持的一句话。尚不支持所有浏览器,Chrome 40+ 和 FF 35+ 支持,但也将默认为 X-Frame-Options(如果存在)。 Spec说,CSP应该优先。这在 CSP 位于 <meta> 标记中时不起作用,并且在使用 Content-Security-Policy-Report-Only 时不起作用。

参考文献

Content Security Policy Cheat Sheet - OWASP

【讨论】:

我无法真正验证这个答案。项目早已不复存在。我们该怎么做?

以上是关于内容安全策略框架祖先。 iframe 不会在 iOS10 中加载内容的主要内容,如果未能解决你的问题,请参考以下文章

尝试渲染 iframe:祖先违反了以下内容安全策略指令:“frame-ancestors 'none'”

不会加载以子域为目标的iframe。

添加框架祖先/没有错误/但仍然无法显示 iframe

具有内容安全策略的 iFrame 沙盒

设置 iframe 的内容安全策略?

带有内容安全策略的iFrame Sandbox