Відмовлено завантажувати сценарій, оскільки він порушує наступну директиву Політики безпеки вмісту


104

Коли я намагався розгорнути свою програму на пристроях із системою Android вище 5.0.0 ( Lollipop ), я постійно отримував такі повідомлення про помилки:

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

Однак, якщо я розгорнув його на мобільному пристрої з системою Android 4.4.x ( KitKat ), політика безпеки працює з типовими:

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

В основному, обидва варіанти для мене не працюють. Як я можу вирішити цю проблему?


Дуже схоже на моє питання. Мені не вдається отримати файл JSON, "оскільки він порушує наступну директиву Політики безпеки вмісту:" connect-src 'self' ""
Майкл Р

1
@MichaelR Якщо ви хочете отримати деяку інформацію про JSON з API через JS, наприклад, аддон tampermonkey або все інше, ви можете використовувати цей плагін chrome.google.com/webstore/detail/disable-content-security/… та вимкнути перевірку CSP, поки ви хочете отримати щось Це хоч і не безпечно, але в деяких випадках це може спрацювати. Я розміщую цю відповідь тут, тому що я шукав свою помилку, і ця тема відображається спочатку в Google.
Eryk Wróbel

Відповіді:


68

Спробуйте замінити ваш мета-тег таким нижче:

<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заголовок, заголовок замінить мета.


6
Як я розумію, CSP, який ви тут визначаєте, відключає всі види безпеки, щоб уникнути атак, дозволяючи теги сценаріїв, а також завантажуючи сценарії з будь-якого домену, а також через незахищені з'єднання. див. developers.google.com/web/fundamentals/security/csp Або я отримую s.th. неправильно? Я гадаю, що в більшості випадків (крім розробки та налагодження) це не те, що ви хочете ... так?
Пітер Т.


9
Я б підтримав цю відповідь, тому що ви пропонуєте використовувати '' unsafe-inline '' unsafe-eval '', чого не слід використовувати при використанні CSP!
ГерТесла

39

Сам відповідь дається 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';** ">

І більше немає помилок!


15

Це було вирішено за допомогою:

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

46
не могли б ви пояснити це ще трохи? Чи можете ви вставити повну мета?
Тоні


2
Це фактично відключає CSP для сценаріїв, дозволяючи будь-яким зловмисним плагінам / xss вводити вбудовані та eval-скрипти, що перешкоджає цілі включення CSP взагалі.
IncredibleHat

7

Ми використовували це:

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

7

Усім, хто шукає повне пояснення, рекомендую ознайомитися з Політикою безпеки вмісту: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .

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

Атаки XSS засновані на нездатності браузера відрізнити код вашої програми від коду, завантаженого з іншого веб-сайту. Отже, ви повинні додати до білого списку джерела вмісту, з яких ви вважаєте безпечним завантаження вмісту, використовуючи Content-Security-Policyзаголовок HTTP.

Ця політика описується з використанням низки директив політики, кожна з яких описує політику для певного типу ресурсу або області політики. Ваша політика повинна містити директиву політики за замовчуванням-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)


Чому на моїй сторінці localhost я можу додати інший скрипт хосту?
mqliutie

Нерідко повторне використання сторонніх сценаріїв, які не розміщені на вашому сервері, але яким ви «довіряєте»
Росіо Гарсія Луке,

7

Рядок повного дозволу

Попередні відповіді не вирішили моєї проблеми, оскільки вони не містять blob: data: gap:ключових слів одночасно; так ось рядок, який робить:

<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:;">

Попередження: Це піддає документ багатьом подвигам. Обов’язково запобігайте виконанню коду в консолі або перебувайте в закритому середовищі, як додаток Cordova .


1
Це правильна відповідь, якщо ви намагаєтесь завантажити, наприклад, JQuery в консолі, як це: stackoverflow.com/a/31912495/137948
Уілл Шеппард

4

Щоб детальніше розробити це, додавши

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

виправляє помилку.


2

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

У нашому випадку ми використовуємо Ngnix як веб-сервер для програми на основі Tomcat 9 Java. З веб-сервера він спрямовує браузер забороняти 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, він не повинен додавати заголовок до відповіді.

Якщо ви стурбовані безпекою або на виробництві, будь ласка, не дотримуйтесь цього, використовуйте ці кроки як лише для тестування та продовження.


-1

Можлива причина, через яку ви отримуєте цю помилку, швидше за все тому, що ви додали / build папку до свого файлу .gitignore або взагалі не перевірили її в Git.

Отже, коли ви Git штовхаєте майстра Heroku , папка збірки, на яку ви посилаєтесь, не потрапляє до Heroku. І тому в ньому видно цю помилку.

Ось чому вона працює належним чином локально, але не тоді, коли ви розгорнуті на Heroku.


У мене те саме питання. так ви пропонуєте видалити / побудувати папку з .gitignore?
Хоанг Мін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.