У меня есть статический веб-сайт, размещенный в корзине, которую я обслуживаю через платформу Google.
Это сайт работает без проблем около 6 месяцев, но в течение последнего месяца у меня периодически возникали проблемы с тем, что он не загружал таблицы стилей и скрипты из-за проблем с "Безопасность содержимого" - это приводит к тому, что в браузере отображается только текст главной страницы без стиля и без функциональности (на основе Javascript). Под прерывистым режимом я подразумеваю, что он работает нормально пару часов, а затем пару часов выходит из строя.
Для этой службы не существует «веб-сервера», поскольку я просто обслуживаю статические страницы из корзины - хотя я понимаю, что у Google должен быть свой собственный сервер, который этим занимается.
Проверяя консоль разработчика в браузере, я вижу следующие проблемы для всех таблиц стилей, скриптов и шрифтов, которые использует веб-страница:
Refused to load the stylesheet XXXXXXX because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'style-src-elem' was not explicitly set, so 'default-src' is used as a fallback.
Я думаю, что мои настройки Content Security верны:
<meta http-equiv="Content-Security-Policy" content="
default-src 'self';
img-src 'self'
https://syndication.twitter.com;
font-src 'self'
https://use.fontawesome.com
https://fonts.gstatic.com
https://fonts.googleapis.com;
script-src 'self' 'unsafe-inline'
https://stackpath.bootstrapcdn.com
https://connect.facebook.net
https://platform.twitter.com
https://code.jquery.com
https://cdnjs.cloudflare.com;
style-src 'self' 'unsafe-inline'
https://stackpath.bootstrapcdn.com
https://use.fontawesome.com
https://fonts.googleapis.com;
frame-src 'self'
https://www.facebook.com
https://connect.facebook.net
https://platform.twitter.com
https://www.youtube.com;
">
Это ссылки в случае сбоя, каждый «внешний» включает подпись с импортом, чтобы гарантировать, что «настоящая» вещь загружена.
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href='https://fonts.googleapis.com/css?family=Titillium+Web' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
Может ли кто-нибудь увидеть, что я делаю неправильно, или дать какие-либо советы о том, как заставить это работать постоянно?
Как было предложено в разделе комментариев @Bruno, эта проблема уже решена в этом вопросе. Для удобства использования я копирую (со ссылками) два решения, которые, как подтвердили пользователи, сработали;
<meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;">
Предупреждение: Это делает документ уязвимым для многих уязвимостей. Вот подробное объяснение возможных угроз безопасности и эксплуатации.
Чтобы уточнить это, добавление
script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';
к метатегу, например
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' https://somedomain.com/ 'unsafe-inline' 'unsafe-eval'; media-src *">
, устраняет ошибку.