我目前只使用 AWS S3 Bucket 来显示我的一些 HTML 画布动画,直到我为使用名为 Celtra 的提要版本的广告平台创建 iFrame 之前从未遇到过问题。
我尝试了 ?embed=true 和 target="_blank" 在另一个问题中提到的策略是 SAMEDOMAIN,不出所料,两者都不起作用。
我是否需要使用创建对象 Lambda 访问点?根据 Mozilla 的说法,DENY 和 SAMEORIGIN 是唯一的选择。
允许来自 uri 这是一个过时的指令,不再适用于现代浏览器。不要使用它。在支持旧版浏览器时,页面只能在指定的源 uri 上显示在框架中。请注意,在旧版 Firefox 实现中,这仍然遇到与 SAMEORIGIN 相同的问题——它不检查框架祖先以查看它们是否来自同一来源。 Content-Security-Policy HTTP 标头有一个 frame-ancestors 指令,您可以使用它来代替。
答案 0 :(得分:1)
是的,您必须使用 Lambda@Edge func 将自定义 HTTP 响应标头添加到 AWS S3 存储桶。
但从 this topic、this one 和 this doc 来看,AWS 不会自行添加 X-Frame-Options
标头。因此,不应在 iframe 中阻止您的 HTML 画布动画。
如果您希望允许在多个位置使用 iframe,X-Frame-Options
不够灵活。将 Conrent-Security-Policy
(CSP) HTTP 标头与 frame-ancestors
指令结合使用。
Conrent-Security-Policy: frame-ancestors *;
将允许在任何位置进行 iframe,而
Conrent-Security-Policy: frame-ancestors example.com friends.com;
允许嵌入页面 仅在 example.com
和 friends.com
站点中发布了此标头。
更新
带有允许嵌入 iframe 的域白名单的 HTTP 标头:
`Conrent-Security-Policy: frame-ancestors example.com friends.com allowed_site.net`
必须由您的 s3.console.aws.amazon.com/s3/buckets/advancedbanners
页面发布。此页面应授予嵌入自身的权限。
我不确定您是否可以在没有 Lambda@Edge func 的情况下在 AWS S3 上发布 CSP 标头。您必须完全使用 HTTP 标头,因为 frame-ancestors
元标记中不支持 <meta http-equiv="Conrent-Security-Policy" content=" directives_here ">
。
并且您必须找到一种方法来停止在 AWS S3 上发布 X-Frame-Options
(XFO) 标头,因为 Safari bug - XFO 并没有因支持 CSP 而过时。