"Не знайдено мета-тегу Content-Security-Policy." помилка в моєму додатку


94

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

No Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.

Я додаю мета у розділі заголовка

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

Але знову ж таки, у мене виникла та сама помилка: у додатку я використовую додатковий браузер і 7 інших посилань на веб-сайт.


3
Чи правильно ви встановили плагін cordova-plugin-whitelist- github.com/apache/cordova-plugin-whitelist ? Після цього вам доведеться додати <allow-navigation href="http://*/*" />до вашого config.xml
Кеваль

1
Дякую, Кеваль, після додавання <allow-navigation href = "http: // * / *" /> тепер моя програма працює нормально. Ще раз спасибі.


3
Коли помилку можна створити, коли в коді відсутній один символ, чому SO не допускає редагування менше шести символів? Цього досить легко виправити, він просто намагався врятувати когось іншого кілька секунд у майбутньому. У кінці атрибута вмісту мета-тегу відсутня подвійна лапка.
Джейсон Д.

Відповіді:


86

Після додавання білого списку cordova-plugin , ви повинні сказати своїй програмі, щоб дозволити доступ до всіх посилань на веб-сторінки або конкретних посилань, якщо ви хочете зберегти його конкретним.

Ви можете просто додати це у свій файл config.xml , який можна знайти в кореневому каталозі вашої програми:

Рекомендовано в документації:

<allow-navigation href="http://example.com/*" />

або:

<allow-navigation href="http://*/*" />

З документації плагіна:

Білий список навігації

Контролює, за якими URL-адресами може переходити сам WebView. Застосовується лише до навігації верхнього рівня.

Примхи: на Android це також застосовується до вбудованих фреймів для схем, що не є http.

За замовчуванням дозволяється переходити лише до URL-адрес file: //. Щоб дозволити інші URL-адреси, потрібно додати теги до вашого config.xml:

<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />

<!-- Wildcards are allowed for the protocol, as a prefix
     to the host, or as a suffix to the path -->
<allow-navigation href="*://*.example.com/*" />

<!-- A wildcard can be used to whitelist the entire network,
     over HTTP and HTTPS.
     *NOT RECOMMENDED* -->
<allow-navigation href="*" />

<!-- The above is equivalent to these three declarations -->
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />

@AmeePrajapati спробувати stackoverflow.com/questions/37044969 / ...
Куш Patel

38

Вам потрібно додати мета-тег CSP у заголовок розділу вашого додатка index.html

Відповідно до https://github.com/apache/cordova-plugin-whitelist#content-security-policy

Політика безпеки вмісту

Контролює, які мережеві запити (зображення, XHR тощо) дозволяється робити (безпосередньо через веб-перегляд).

В Android та iOS білий список мережевих запитів (див. Вище) не може фільтрувати всі типи запитів (наприклад, <video>& WebSockets не заблоковані). Отже, на додаток до білого списку, ви повинні використовувати тег Політики безпеки вмісту <meta> на всіх своїх сторінках.

На Android підтримка CSP в системному веб-перегляді починається з KitKat (але доступна у всіх версіях, що використовують Crosswalk WebView).

Ось кілька прикладів декларацій CSP для ваших .htmlсторінок:

<!-- Good default declaration:
    * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
    * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
    * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
        * Enable inline JS: add 'unsafe-inline' to default-src
        * Enable eval(): add 'unsafe-eval' to default-src
-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">

<!-- Allow requests to foo.com -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">

<!-- Enable all requests, inline styles, and eval() -->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

<!-- Allow XHRs via https only -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">

<!-- Allow iframe to https://cordova.apache.org/ -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org">

Коли я додаю CSP Decleration, наступний фрагмент коду для google map виходить з ладу таким чином. Будь-яка ідея? var pos = new google.maps.LatLng (position.coords.latitude, position.coords.longitude); // рядок 173 11-09 21: 17: 30.724: D / SystemWebChromeClient (25692): файл: ///android_asset/www/index.html: Рядок 173: Uncaught ReferenceError: google не визначено
shamaleyte

1
Мені потрібно було закрити метатеги за допомогою />, щоб їх розпізнали
metamagikum

23

У вашому метатегу є помилки.

Ваш:

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

Виправлено:

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

Зверніть увагу на двокрапку після "script-src" та кінцеві подвійні лапки мета-тегу.


3
коли я включаю <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>перезавантаження в реальному часі з іонним фреймворком, перестає працювати, тому остерігайтеся інших
CommonSenseCode

@codePlusPlus, щоб знову активувати Ionic livereload, додати http://localhost:35729до директиви script-scr та ws://localhost:35729до директиви connect-src.
kolli

@kolli, ти можеш показати, як би виглядали нові директиви? незрозуміло, як додати їх до директив.
jessewolfe

Я бачу, що інформація є в оригінальній публікації. Але для уточнення: Зауважте, що, додавши ', це означає, що ви можете замінити script-src 'self' 'unsafe-inline' 'unsafe-eval'на, script-src 'self' http://localhost:35279 'unsafe-inline' 'unsafe-eval'і ви додасте нову директиву з ; script-src ws://localhost:35279
розділюючою

Виправлення до вище ... для другої частини воно повинно бути ; connect-src 'self' ws://localhost:35279. Зверніть увагу, що я отримував помилку (не міг отримати доступ до файлу: // <шлях до index.html> через порушення CSP), доки я не додав "self".
jessewolfe

2

Для мене було достатньо переінсталювати плагін білого списку :

cordova plugin remove cordova-plugin-whitelist

і потім

cordova plugin add cordova-plugin-whitelist

Схоже, оновлення попередніх версій Кордови не вдалося.


1

Для мене проблема полягала в тому, що я використовував застарілі версії платформ cordova android та ios . Тож оновлення до android@5.1.1 та ios@4.0.1 це вирішило.

Ви можете перейти до таких конкретних версій:

cordova platforms rm android
cordova platforms add android@5.1.1
cordova platforms rm ios
cordova platforms add ios@4.0.1

ви мали на увазі android 5.1.1 ?
mix3d

Я слідував обом, @Maxim та Pierre-Alexis de Solminihac, і нарешті змусив мою програму працювати нормально. Дякую!
Залакаїн

0

Є ще одне питання про зв’язок. Деякі версії Android можуть підключатися, але деякі не можуть. Тож є інше рішення

у AndroidManifest.xml:

<application ... android:usesCleartextTraffic="true">
        ...
    </application>

Просто додайте 'android: usesCleartextTraffic = "true"'

і проблема вирішена остаточно.

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