"Метатег Content-Security-Policy не найден."ошибка в моем приложении phonegap


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

5 93

5 ответов:

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

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

рекомендовано в документации:

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

или:

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

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

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

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

причуды: на Android это также относится к iframes для схем без http(S).

по умолчанию разрешены переходы только к файлу: / / URLs. Позволять другие URL-адреса, вы должны добавить теги конфиг.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:*" />

вы должны добавить метатег CSP в головной части вашего приложения index.html

согласно https://github.com/apache/cordova-plugin-whitelist#content-security-policy

Политика Безопасности Контента

управляет тем, какие сетевые запросы (изображения, XHRs и т. д.) разрешены (непосредственно через webview).

на Android и iOS белый список сетевых запросов (см. выше) не является способный для того чтобы фильтровать все типы запросы (например,<video> & WebSockets являются не перекрывать.) Итак, в дополнение к белому списку, вы должны использовать Политика Безопасности Контента <meta> - тег на всех страницах.

на Android поддержка CSP в системе webview начинается с 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">

в вашем метатеге есть ошибки.

С уважением:

<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" и конец двойной кавычки мета-тега.

для меня было достаточно переустановить белый плагин:

cordova plugin remove cordova-plugin-whitelist

а то

cordova plugin add cordova-plugin-whitelist

похоже, что обновление с предыдущих версий Cordova не было успешным.

для меня проблема была в том, что я использовал устаревшие версии 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