#html #amazon-s3 #amazon-cloudfront #content-security-policy
Вопрос:
Я пытаюсь загрузить веб-страницу, которая сохранена в 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> -->
Похоже, что Политика безопасности контента игнорируется?
Я получаю ту же ошибку в Chrome и Firefox.
Комментарии:
1. Мне удалось заставить его работать, но я не совсем понимаю, почему. Я полагаю, что была функция lambda@edge, которая перезаписывала заголовок. Это можно найти в разделе Cloudfront>Дистрибутивы>>…>>>Поведение ->>>> Ассоциации функций. После его удаления я не смог найти функцию lamda@edge, поэтому не смог проверить, в чем проблема.
2. Причина была в
lambda@edge
функции — она не перезаписывала ваши мета-теги, а добавляла второй CSP через HTTP-заголовок. В случае 2 CSP применяются самые строгие правила из обеих политик, поэтому CSP в метатеге не может смягчить CSP, опубликованныйlambda@edge
. Вы должны использовать одну из двух вещей: либо мета-тег, либоlambda@edge
функцию для доставки политики.
Ответ №1:
Спасибо Гранти за ответ на этот вопрос в комментариях выше.
Проблема заключалась в том, что лямбда@edge добавлял второй CSP через HTTP-заголовок. В случае 2 CSP применяются самые строгие правила из обеих политик, поэтому CSP в метатеге не может смягчить CSP, опубликованный lambda@edge. Вы должны использовать одну из двух вещей: либо мета-тег, либо функцию lambda@edge для доставки политики