1

所以我们使用 Meteor 浏览器策略包,并使用 Amazon S3 来存储内容。

在服务器上,我们设置了浏览器策略,如下所示:

BrowserPolicy.content.allowOriginForAll('*.amazonaws.com');
BrowserPolicy.content.allowOriginForAll('*.s3.amazonaws.com');

访问我们的 http:// 网站时,这在本地开发和生产环境中运行良好。但是,当使用 https:// 地址访问我们的站点时,AWS 内容不再通过此策略。

控制台上出现以下错误

Refused to load the image 'http://our-bucket-name.s3.amazonaws.com/asset-stored-in-s3.png' because it violates the following Content Security Policy directive: "img-src data: 'self' *.google-analytics.com *.zencdn.net *.filepicker.io *.uservoice.com *.amazonaws.com *.s3.amazonaws.com".

正如您所看到的,我们在浏览器策略中允许了其他一些来源,这些似乎在 http 和 https 中都可以正常工作。AWS S3 是唯一失败的。

我试过 Chrome、Firefox 和 Safari,它们都有同样的问题。

这是怎么回事?

4

1 回答 1

1

我可能没有这个问题的确切答案,但我有一些社区可能会觉得有帮助的信息。

首先,您应该避免提供混合内容。我不清楚这是否会触发浏览器策略警报,但无论如何你都不应该这样做。最简单的解决方案是使用protocol-relative-url或只是在您的 url 中明确指定https

其次,我也假设通配符像glob一样工作。但是,有人告诉我,它的工作方式与 ssl 证书规则相同 - 即适用于所有子域或特定子域。换句话说,*.example.comandwww.example.com是有效的,但是*.foo.example.com, 没有意义。我认为您想像这样显式添加您的存储桶:

BrowserPolicy.content.allowOriginForAll('our-bucket-name.s3.amazonaws.com')

除非你真的想信任所有的amazonaws.com.

于 2013-11-07T22:24:45.580 回答