«Метатег 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 других ссылок на веб-сайты.

Manikandan C
источник
3
Правильно ли вы установили плагин cordova-plugin-whitelist- github.com/apache/cordova-plugin-whitelist ? После этого вам нужно будет добавить <allow-navigation href="http://*/*" />в свой config.xml
Кеваль
1
Спасибо, Кеваль, после добавления <allow-navigation href = "http: // * / *" /> теперь мое приложение работает нормально. Еще раз спасибо.
связанные Как настроить Cordova-android 4.0 с белым списком
Ричард Ле Мезурье
3
Если при отсутствии одного символа в коде может возникнуть ошибка, почему SO не разрешает редактирование, длина которого меньше шести символов? Это довольно легко исправить, просто пытался спасти кого-то еще на несколько секунд в будущем. В конце атрибута содержимого метатега отсутствует двойная кавычка.
Джейсон Д.

Ответы:

86

После добавления cordova-plugin-whitelist вы должны указать своему приложению разрешить доступ ко всем ссылкам веб-страниц или определенным ссылкам, если вы хотите, чтобы они были конкретными.

Вы можете просто добавить это в свой config.xml , который находится в корневом каталоге вашего приложения:

Рекомендуется в документации:

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

или:

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

Из документации плагина:

Белый список навигации

Управляет тем, к каким URL-адресам можно перейти непосредственно в WebView. Применимо только к навигации верхнего уровня.

Причуды: на Android это также относится к iframe для схем, отличных от http (s).

По умолчанию разрешен переход только к 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/…
Куш Патель,
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">
Tomtastico
источник
Когда я добавляю CSP Decleration, следующий фрагмент кода для карты Google терпит неудачу. Любая идея ? var pos = new google.maps.LatLng (position.coords.latitude, position.coords.longitude); // строка 173 11-09 21: 17: 30.724: D / SystemWebChromeClient (25692): file: ///android_asset/www/index.html: Строка 173: Uncaught ReferenceError: google is not defined
shamaleyte
1
Мне нужно было закрыть мета-теги с помощью />, чтобы меня узнали
metamagikum 02 дек.15,
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'"/>live reload с ionic framework, перестает работать, так что остерегайтесь других
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
Пьер-Алексис де Сольминиак
источник
ты имел ввиду андроид 5.1.1 ?
mix3d
Я последовал советам @Maxim и Pierre-Alexis de Solminihac, и, наконец, мое приложение заработало нормально. Спасибо!
Залакаин
0

Есть еще одна проблема с подключением. Некоторые версии Android могут подключаться, а некоторые нет. Так что есть другое решение

в AndroidManifest.xml:

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

Просто добавьте android: usesCleartextTraffic = "true" '

и проблема наконец решена.

Енес Юртлу
источник