【问题标题】:Content Security Policy directive violation with Cloudfront and S3Cloudfront 和 S3 违反内容安全策略指令
【发布时间】:2021-12-07 07:58:44
【问题描述】:

我正在尝试加载保存在 AWS S3 中的网页,并使用 Cloudfront 从我的域中加载它。我收到以下错误消息:

Refused to load media from 'https://www.example.com/video.mp4' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'media-src' was not explicitly set, so 'default-src' is used as a fallback.

我在页面中有以下标题,可以通过浏览器查看

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
<html>
<!-- <script src="screen.js"></script> -->

似乎 Content-Security-Policy 被忽略了?

我在 Chrome 和 Firefox 中收到相同的错误。

【问题讨论】:

  • 我设法让它工作,但我不确定为什么。我相信有一个 lambda@edge 函数覆盖了标题。这可以在 Cloudfront>Distributions>...>Behaviour -> Function associations 下找到。去掉之后,找不到lamda@edge函数,所以无法验证是不是问题。
  • 原因在于lambda@edge 函数 - 它没有覆盖您的元标记,而是通过 HTTP 标头添加第二个 CSP。对于 2 个 CSP,两个策略中最严格的规则都适用,因此元标记中的 CSP 无法缓解 lambda@edge 发布的 CSP。您应该使用以下两种方式之一:元标记或lambda@edge 函数来传递策略。

标签: html amazon-s3 amazon-cloudfront content-security-policy


【解决方案1】:

感谢您在上面的 cmets 中回答这个问题。

问题在于 lambda@edge 通过 HTTP 标头添加了第二个 CSP。在 2 个 CSP 的情况下,两个策略中最严格的规则都适用,因此元标记中的 CSP 无法缓解 lambda@edge 发布的 CSP。您应该使用以下两种方式之一:元标记或 lambda@edge 函数来传递策略

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 2014-11-29
    • 2022-10-18
    • 2016-01-14
    • 2017-11-10
    • 2015-10-16
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多