Загрузка скрипта и манифеста нарушает директивы политики безопасности контента - PullRequest
2 голосов
/ 18 апреля 2019

Я пытаюсь разработать Прогрессивное веб-приложение, которое включает в себя внешний JavaScript, внешнюю CSS, библиотеку JQuery и манифеста и сервисного работника.

Я установил Политику безопасности контента, чтобы загрузить их, и язапуск его на localhost и в Google Chrome.

Вот моя HTML-голова:

<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' https://*; manifest-src 'self'">
    <script src="example.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> 
    <!-- <script src="jquery.min.js"></script> -->
    <link rel="stylesheet" type="text/css" href="example.css">
    <link rel="manifest" href="manifest.json">
    <script>
        if ('serviceWorker' in navigator) {
            navigator.serviceWorker.register('sw.js').then(function(registration) {
                console.log('Service worker successfully installed. Scope:', registration.scope);
            }).catch(function(error) {
                console.log('Service worker installation failed:', error);
            });
        }
    </script>
    <link rel="icon" href="../images/favicon.ico" type="image/x-icon" />
    <title>xxx</title>
</head>

Я бы ожидал, что все будет работать правильно, но вместо этого я получаю эти ошибки, которые противоречат моему объявлению:

Отказался от загрузки сценария 'https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js', поскольку он нарушает следующую директиву политики безопасности содержимого: "script-src' self '".Обратите внимание, что «script-src-elem» не был задан явно, поэтому «script-src» используется в качестве запасного варианта.

Отказ от выполнения встроенного сценария, поскольку он нарушает следующую директиву политики безопасности содержимого: «script-"Я" ".Для включения встроенного выполнения требуется ключевое слово «unsafe-inline», хеш («xxx») или одноразовый номер («nonce -...»).

Отказался загружать манифест из 'http://localhost:7681/manifest.json', поскольку он нарушает следующую директиву политики безопасности содержимого: "default-src 'none'".Обратите внимание, что «manifest-src» не был задан явно, поэтому «default-src» используется в качестве запасного варианта.

Даже если я включил ключевое слово unsafe-inline, включил загрузку скриптов из httpsи я не объявил "default-src 'none'", поэтому я думаю, что что-то упустил.Что блокирует загрузку моих скриптов?

EDIT
Я понял, что пошло не так: сервер работает на libwebsockets, который по умолчанию использует очень строгую политику безопасности содержимого.Изменяя параметры lws, директивы CSP корректно загружаются из заголовка HTML.

1 Ответ

0 голосов
/ 18 апреля 2019

Источник директив CSP указан здесь .

Цитата из источника выше:

Адрес сайта может включать необязательный начальный подстановочный знак (символ звездочки, '*')

Однако для этого все еще требуется действительный адрес сайта. Поэтому https://* не является допустимым источником CSP и поэтому игнорируется.

Чтобы разрешить загрузку скриптов со всех сайтов https:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' https:; manifest-src 'self'">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...