我正在尝试为我通过 s3/cloudfront 提供的 html 文件设置 Content-Security-Policy 标头。我正在使用基于 Web 的 AWS 控制台。每当我尝试添加标题时:
它似乎不尊重它。我能做些什么来确保提供此标头?
我正在尝试为我通过 s3/cloudfront 提供的 html 文件设置 Content-Security-Policy 标头。我正在使用基于 Web 的 AWS 控制台。每当我尝试添加标题时:
它似乎不尊重它。我能做些什么来确保提供此标头?
我遇到了同样的问题(使用 S3/CloudFront),目前似乎没有办法轻松设置它。
S3 有一个允许的标头白名单,并且 Content-Security-Policy 不在其中。虽然您确实可以使用前缀 x-amz-meta-Content-Security-Policy,但这无济于事,因为没有浏览器支持。
我可以看到两个选项。
1) 您可以从 EC2 实例上的网络服务器提供 html 内容,并将其设置为另一个 CloudFront 源。不是一个很好的解决方案。
2) 将 CSP 作为元标记包含在您的 html 文档中:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src http://*.foobar.com 'self'">
...
这个选项并没有被浏览器广泛支持,但它似乎同时适用于 Webkit 和 Firefox,因此当前的 Chrome、Firefox、Safari(和 IOS 7 Safari)似乎都支持它。
我选择了 2,因为它是更简单/更便宜/更快的解决方案,我希望 AWS 将来会添加 CSP 标头。
S3/CloudFront 采用源设置的任何标头并将其转发给客户端,但您不能直接在响应上设置自定义标头。
您可以使用可以通过 CloudFront 注入安全标头的 Lambda@Edge 函数。
以下是该过程的工作原理:(参考 aws 博客)
以下是来自 aws 的关于如何逐步完成此操作的博客。
如果您通过 CloudFront 进行测试,您是否确保已使缓存对象无效?您可以尝试上传一个全新的文件,然后尝试通过 CF 访问它并查看标题是否仍然不存在吗?
更新
似乎自定义元数据不会按照 DOC 的预期工作。除 S3 支持的元数据(下拉菜单中显示的元数据)以外的任何元数据都必须以 x-amz-meta- 为前缀