我正在尝试为我通过s3 / cloudfront服务的html文件设置Content-Security-Policy标头。我正在使用基于Web的AWS控制台。每当我尝试添加标题时:
它似乎并不尊重它。我该怎么做才能确保提供此标头?
答案 0 :(得分:4)
如果您正在通过CloudFront进行测试,您是否确定已使缓存的对象无效?您是否可以尝试上传一个全新的文件,然后尝试通过CF访问它并查看标题是否仍然存在?
<强>更新强>
似乎自定义元数据不会像DOC那样按预期工作。除S3支持的元数据之外的任何元数据(下拉列表中显示的元数据)都必须以x-amz-meta为前缀 -
答案 1 :(得分:4)
我遇到了同样的问题(使用S3 / CloudFront),看来目前无法轻松设置它。
S3具有允许的标头的白名单,并且不包含Content-Security-Policy。虽然确实可以使用带前缀的x-amz-meta-Content-Security-Policy,但由于没有浏览器支持,因此无用。
我可以看到两种选择。
1)您可以从EC2实例上的Web服务器提供html内容,并将其设置为另一个CloudFront原点。这不是一个很好的解决方案。
2)在您的html文档中包含CSP作为元标记:
<!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标题。
答案 2 :(得分:1)
S3 / CloudFront会采用原始设置的所有标头并将其转发给客户端,但是您不能在响应中直接设置自定义标头。
您可以使用Lambda @ Edge函数,该函数可以通过CloudFront注入安全标头。
以下是该过程的工作方式:(reference aws blog)
下面是来自aws的博客,介绍如何逐步执行此操作。