Lorsque j'ai essayé de déployer mon application sur des appareils avec un système Android supérieur à 5.0.0 ( Lollipop ), j'ai continué à recevoir ce type de messages d'erreur:
07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): file: ///android_asset/www/index.html: Ligne 0: a refusé de charger le script 'http: // xxxxx' car il viole le contenu suivant Directive de politique de sécurité: "script-src 'self' 'unsafe-eval' 'unsafe-inline'". 07-03 18: 39: 21.621: I / chromium (9132): [INFO: CONSOLE (0)] "Refus de charger le script 'http: // xxx' car il enfreint la directive de politique de sécurité du contenu suivante:" script- src 'self' 'unsafe-eval' 'unsafe-inline' ".
Cependant, si je l'ai déployé sur un appareil mobile avec le système Android de 4.4.x ( KitKat ), la politique de sécurité fonctionne avec celles par défaut:
<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 *">
Alors j'ai pensé, peut-être, je devrais changer pour quelque chose comme ceci:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">
Fondamentalement, les deux options ne fonctionnent pas pour moi. Comment puis-je résoudre ce problème?
la source
Réponses:
Essayez de remplacer votre balise Meta par celle-ci ci-dessous:
Ou en plus de ce que vous avez, vous devez ajouter
http://*
les deuxstyle-src
etscript-src
comme vu ci-dessus ajouté après «soi».Si votre serveur inclut l'en-
Content-Security-Policy
tête, l'en-tête remplacera la méta.la source
La réponse personnelle donnée par MagngooSasa a fait l'affaire, mais pour quiconque essaie de comprendre la réponse, voici quelques détails supplémentaires:
Lors du développement d' applications Cordova avec Visual Studio, j'ai essayé d'importer un fichier JavaScript distant [situé ici http://Guess.What.com/MyScript.js], mais j'ai l'erreur mentionnée dans le titre.
Voici la balise meta avant , dans le fichier index.html du projet:
Voici la balise meta corrigée , pour permettre l'importation d'un script distant:
Et plus d'erreur!
la source
Il a été résolu avec:
la source
Nous avons utilisé ceci:
la source
Pour tous ceux qui recherchent une explication complète, je vous recommande de consulter la politique de sécurité du contenu: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .
Les attaques XSS sont basées sur l'incapacité du navigateur à distinguer le code de votre application du code téléchargé à partir d'un autre site Web. Vous devez donc mettre sur liste blanche les origines de contenu que vous considérez comme sûres pour télécharger du contenu, à l'aide de l'
Content-Security-Policy
en-tête HTTP.Cette stratégie est décrite à l'aide d'une série de directives de stratégie, chacune décrivant la stratégie pour un certain type de ressource ou domaine de stratégie. Votre stratégie doit inclure une directive de stratégie default-src, qui est une solution de secours pour les autres types de ressources lorsqu'ils n'ont pas de stratégies qui leur sont propres.
Donc, si vous modifiez votre balise pour:
Vous dites que vous autorisez l'exécution de code Javacsript (
script-src
) des origines'self'
,http://onlineerp.solution.quebec
,'unsafe-inline'
,'unsafe-eval'
.Je suppose que les deux premiers sont parfaitement valables pour votre cas d'utilisation, je ne suis pas sûr des autres.
'unsafe-line'
et'unsafe-eval'
posent un problème de sécurité, vous ne devriez donc pas les utiliser sauf si vous en avez un besoin très spécifique:la source
Chaîne d'autorisation complète
Les réponses précédentes n'ont pas résolu mon problème, car elles n'incluent pas de
blob: data: gap:
mots clés en même temps; voici donc une chaîne qui fait:Attention: cela expose le document à de nombreux exploits. Veillez à empêcher les utilisateurs d'exécuter du code dans la console ou de se trouver dans un environnement fermé comme une application Cordova .
la source
Pour en dire plus à ce sujet, ajoutez
à la balise meta comme ça,
corrige l'erreur.
la source
L'ajout de la balise meta pour ignorer cette politique ne nous a pas aidés, car notre serveur Web injectait l'en-
Content-Security-Policy
tête dans la réponse.Dans notre cas, nous utilisons Ngnix comme serveur Web pour une application Tomcat 9 Java. Depuis le serveur Web, il ordonne au navigateur de ne pas autoriser
inline scripts
, donc pour un test temporaire, nous avons désactivéContent-Security-Policy
en commentant.Comment le désactiver dans ngnix
Par défaut, le fichier ngnix ssl.conf aura ceci en ajoutant un en-tête à la réponse:
#> 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';";
Si vous commentez simplement cette ligne et redémarrez ngnix, cela ne devrait pas ajouter l'en-tête à la réponse.
la source
La raison probable pour laquelle vous obtenez cette erreur est probablement parce que vous avez ajouté le dossier / build à votre fichier .gitignore ou que vous ne l'avez généralement pas archivé dans Git.
Ainsi, lorsque vous appuyez sur le maître Heroku par Git , le dossier de construction que vous référencez n'est pas poussé vers Heroku. Et c'est pourquoi il montre cette erreur.
C'est la raison pour laquelle cela fonctionne correctement localement, mais pas lorsque vous avez déployé sur Heroku.
la source