"Aucune balise meta Content-Security-Policy trouvée."erreur dans mon application phonegap
Après la mise à jour de Cordova 5.0 dans mon système, je crée de nouvelles applications. Lorsque j'ai testé mon application sur un appareil à ce moment-là, je reçois une erreur dans le journal de la console:
No Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.
J'ajoute meta dans la section head
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>
Mais encore une fois, j'ai eu la même erreur, dans l'application, j'utilise le plugin de navigateur in-app et 7 d'autres liens de site web.
5 réponses
Après avoir ajouté le cordova-plugin-whitelist , vous devez dire à votre application d'autoriser l'accès à tous les liens de page web ou des liens spécifiques, si vous voulez le garder spécifique.
, Vous pouvez simplement ajouter ceci à votre config.xml , qui se trouve dans le répertoire racine de votre application:
Recommandé dans la documentation:
<allow-navigation href="http://example.com/*" />
Ou:
<allow-navigation href="http://*/*" />
De la documentation du plugin:
Liste Blanche De Navigation
Contrôle les URL vers lesquelles le WebView lui-même peut être navigué. S'applique à navigation de niveau supérieur uniquement.
Quirks: sur Android, il s'applique également aux iframes pour les schémas non-http(s).
Par défaut, les navigations uniquement vers les URL file: / / sont autorisées. Permettre Autres Autres URL, vous devez ajouter des balises à votre 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:*" />
Vous devez ajouter une balise meta CSP dans la section head de index.html
{[6 de votre application]}
Par https://github.com/apache/cordova-plugin-whitelist#content-security-policy
Politique De Sécurité Du Contenu
Contrôle les requêtes réseau (images, XHRs, etc.) autorisées (via webview directement).
Sur Android et iOS, la liste blanche des requêtes réseau (voir ci-dessus) n'est pas capable de filtrer tous les types de requêtes (par exemple
<video>
& WebSockets sont pas bloquer). Donc, en plus de la liste blanche, vous devriez utiliser un Politique De Sécurité Du Contenu<meta>
balise sur toutes vos pages.Sur Android, la prise en charge de CSP dans le système webview commence par KitKat (mais est disponible sur toutes les versions en utilisant Crosswalk WebView).
Voici quelques exemples de déclarations CSP pour vos pages
.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">
Il y a des erreurs dans votre balise meta.
Vôtre:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>
Corrigé:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>
Notez le deux-points après "script-src", et la fin double-citation de la balise meta.
Pour moi, il suffisait de réinstallerwhitelist plugin:
cordova plugin remove cordova-plugin-whitelist
, puis
cordova plugin add cordova-plugin-whitelist
Il semble que la mise à jour des versions précédentes de Cordova n'a pas été couronnée de succès.
Pour moi, le problème était que j'utilisais des versions obsolètes des plates-formes cordova android et ios. Mise à niveau vers android@5.1.1 et ios@4.0.1 résolu.
, Vous pouvez mettre à niveau vers ces versions spécifiques:
cordova platforms rm android
cordova platforms add android@5.1.1
cordova platforms rm ios
cordova platforms add ios@4.0.1