Подтвердить что ты не робот

Отказано в загрузке script, поскольку оно нарушает следующую директиву политики безопасности содержимого

Когда я пытался развернуть свое приложение на устройствах с системой Android выше 5.0.0, я продолжал получать такие сообщения об ошибках:

07-03 18: 39: 21.621: D/SystemWebChromeClient (9132): file:///android_asset/www/index.html: строка 0: отказался загружать скрипт "http://xxxxx", поскольку он нарушает следующий контент Директива политики безопасности: "script-src 'self' 'unsafe-eval' "небезопасный встраиваемый" ". 07-03 18: 39: 21.621: I/хром (9132): [INFO: CONSOLE (0)] "Отказался загружать скриптhttp://xxx, потому что он нарушает следующую директиву Content Security Policy: "script-src 'self' 'unsafe-eval' 'unsafe-inline' ".

Однако, если я развернул его на мобильном устройстве с системой Android 4.4.x, политика безопасности будет работать со стандартными:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

Тогда я подумал, может быть, мне следует изменить что-то вроде этого:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">

В принципе, оба варианта не работают для меня. У кого-нибудь есть идеи, как решить эту проблему?

4b9b3361

Ответ 1

решена с помощью

script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval'; 

Ответ 2

Попробуйте заменить ваш метатег на это ниже:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />

Или в дополнение к тому, что у вас есть, вы должны добавить http://* к style-src и script-src как показано выше, добавленное после 'self'

Если ваш сервер включает заголовок Content-Security-Policy, заголовок будет переопределять мета.

Ответ 3

Автоматический ответ, данный MagngooSasa, сработал, но для всех, кто пытается понять ответ, вот несколько подробностей:

При разработке приложений Cordova для Visual Studio я попытался импортировать удаленный файл javascript [расположенный здесь http://Guess.What.com/MyScript.js], но с ошибкой, упомянутой в заголовке.

Вот метатег ДО, в файле index.html проекта

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

Вот ИСПРАВЛЕННЫЙ метатег, позволяющий импортировать удаленный скрипт:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

и больше ошибок нет!

Ответ 4

Мы использовали это:

<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; style-src 'self' http://* https://* 'unsafe-inline'; script-src 'self' http://* https://* 'unsafe-inline' 'unsafe-eval'">

Ответ 5

Чтобы подробнее остановиться на этом добавлении

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 *">

Устраняет ошибку

Ответ 6

Для тех, кто ищет полное объяснение, я рекомендую вам ознакомиться с политикой безопасности контента: https://www.html5rocks.com/en/tutorials/security/content-security-policy/.

"Код с https://mybank.com должен иметь доступ только к данным https://mybank.com, и https://evil.example.com, безусловно, никогда не следует разрешать доступ. Каждое происхождение остается изолированным от остальных паутина"

Атаки XSS основаны на неспособности браузера отличить код вашего приложения от кода, загруженного с другого веб-сайта. Таким образом, вы должны внести в белый список источники контента, которые вы считаете безопасными для загрузки контента, используя HTTP-заголовок Content-Security-Policy.

Эта политика описывается с использованием ряда директив политики, каждая из которых описывает политику для определенного типа ресурса или области политики. Ваша политика должна включать директиву политики default-src, которая является запасной для других типов ресурсов, когда у них нет собственных политик.

Итак, если вы измените свой тег на:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

Вы говорите, что авторизуете выполнение кода Javacsript (script-src) из источников 'self', http://onlineerp.solution.quebec, 'unsafe-inline', 'unsafe-eval'.

Я полагаю, что первые два являются верными для вашего случая использования, я немного не уверен насчет других. 'unsafe-line' и 'unsafe-eval' создают проблему безопасности, поэтому вы не должны использовать их, если у вас нет особой необходимости в них:

"Если eval и его братья из текста в JavaScript абсолютно необходимы для вашего приложения, вы можете включить их, добавив" unsafe-eval "в качестве разрешенного источника в директиву script-src. Но, опять же, не надо. выполнение строк значительно усложняет злоумышленнику выполнение несанкционированного кода на вашем сайте. " (Майк Уэст, Google)

Ответ 7

Добавление мета-тега для игнорирования этой политики не помогло нам, поскольку наш веб-сервер вставляет заголовок Content-Security-Policy в ответ.

В нашем случае мы используем Ngnix в качестве веб-сервера для Java-приложения tomcat9. С веб-сервера браузер запрещает использовать inline scripts, поэтому для временного тестирования мы отключили Content-Security-Policy, комментируя.

Как отключить в ngnix?

  • По умолчанию ngnix ssl.conf будет иметь этот заголовок добавления к ответу.

    #> grep 'Content-Security' -ir/etc/nginx/global/ssl.conf add_header Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; script-src 'self'; img-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self';";

  • Если вы просто прокомментируете эту строку и перезапустите ngnix, она не должна добавлять заголовок к ответу.

Если вы беспокоитесь о безопасности или производстве, пожалуйста, не следуйте этому, используйте эти шаги только для целей тестирования и продолжения.