Kiedy próbowałem wdrożyć moją aplikację na urządzeniach z systemem Android powyżej 5.0.0 ( Lollipop ), otrzymywałem następujące komunikaty o błędach:
07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): file: ///android_asset/www/index.html: Line 0: odmówiono załadowania skryptu „http: // xxxxx”, ponieważ narusza on następującą treść Dyrektywa zasad bezpieczeństwa: "script-src 'self' 'unsafe-eval' 'unsafe-inline'". 07-03 18: 39: 21.621: I / chromium (9132): [INFO: CONSOLE (0)] „Odmówiono załadowania skryptu„ http: // xxx ”, ponieważ narusza on następującą dyrektywę polityki bezpieczeństwa treści:„ script- src 'self' 'unsafe-eval' 'unsafe-inline' ".
Jeśli jednak wdrożyłem go na urządzenie mobilne z systemem Android 4.4.x ( KitKat ), polityka bezpieczeństwa działa z domyślnymi:
<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 *">
Wtedy pomyślałem, że może powinienem zmienić na coś takiego:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">
Zasadniczo obie opcje nie działają dla mnie. Jak mogę rozwiązać ten problem?
źródło
Odpowiedzi:
Spróbuj zamienić swój metatag na poniższy:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />
Lub oprócz tego, co masz, powinieneś dodać
http://*
do obustyle-src
iscript-src
jak widać powyżej, dodać po „siebie”.Jeśli twój serwer zawiera
Content-Security-Policy
nagłówek, nagłówek zastąpi meta.źródło
Samo odpowiedź udzielona przez MagngooSasa załatwiła sprawę , ale dla każdego, kto próbuje zrozumieć odpowiedź, oto kilka dodatkowych szczegółów:
Przy opracowywaniu Cordova aplikacje z Visual Studio, próbowałem zaimportować plik JavaScript zdalnego znajdujący się tutaj http://Guess.What.com/MyScript.js [], ale mam błąd wymieniony w tytule.
Oto meta tag przed , w pliku index.html projektu:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
Oto poprawiony metatag, aby umożliwić importowanie zdalnego skryptu:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">
I koniec z błędami!
źródło
Zostało rozwiązane za pomocą:
script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';
źródło
Każdy, kto szuka pełnego wyjaśnienia, polecam zapoznać się z Polityką bezpieczeństwa treści: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .
Ataki XSS polegają na tym, że przeglądarka nie jest w stanie odróżnić kodu aplikacji od kodu pobranego z innej witryny. Musisz więc umieścić na białej liście źródła treści, z których możesz bezpiecznie pobierać zawartość, używając
Content-Security-Policy
nagłówka HTTP.Ta zasada jest opisana przy użyciu serii dyrektyw, z których każda opisuje zasady dla określonego typu zasobów lub obszaru polityki. Twoje zasady powinny zawierać dyrektywę zasad default-src, która jest rezerwą dla innych typów zasobów, gdy nie mają one własnych zasad.
Jeśli więc zmodyfikujesz swój tag, aby:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">
Mówisz, że jesteś zezwalająca na wykonywanie kodu Javacsript (
script-src
) od początków'self'
,http://onlineerp.solution.quebec
,'unsafe-inline'
,'unsafe-eval'
.Wydaje mi się, że pierwsze dwa są perfekcyjnie poprawne w twoim przypadku użycia, nie jestem pewien co do pozostałych.
'unsafe-line'
i'unsafe-eval'
stanowią problem z bezpieczeństwem, więc nie powinieneś ich używać, chyba że masz ich bardzo konkretną potrzebę:źródło
Ciąg pełnego pozwolenia
Poprzednie odpowiedzi nie rozwiązały mojego problemu, ponieważ nie zawierają jednocześnie
blob: data: gap:
słów kluczowych; więc oto ciąg, który robi:<meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;">
Ostrzeżenie: naraża to dokument na wiele exploitów. Pamiętaj, aby uniemożliwić użytkownikom wykonywanie kodu w konsoli lub przebywanie w zamkniętym środowisku, takim jak aplikacja Cordova .
źródło
Użyliśmy tego:
<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; style-src 'self' http://* https://* 'unsafe-inline'; script-src 'self' http://* https://* 'unsafe-inline' 'unsafe-eval'">
źródło
Aby rozwinąć trochę więcej, dodając
script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';
do metatagu w ten sposób,
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' https://somedomain.com/ 'unsafe-inline' 'unsafe-eval'; media-src *">
naprawia błąd.
źródło
Dodanie metatagu w celu zignorowania tej zasady nie pomogło nam, ponieważ nasz serwer sieciowy wstawił
Content-Security-Policy
nagłówek w odpowiedzi.W naszym przypadku używamy Ngnix jako serwera WWW dla aplikacji Tomcat 9 opartej na Javie. Z serwera WWW nakazuje przeglądarce, aby nie zezwalała
inline scripts
, więc na czasowe testy wyłączyliśmyContent-Security-Policy
, komentując.Jak to wyłączyć w ngnix
Domyślnie plik ngnix ssl.conf będzie zawierał następujące dodanie nagłówka do odpowiedzi:
#> 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';";
Jeśli po prostu skomentujesz tę linię i zrestartujesz ngnix, nie powinno to dodawać nagłówka do odpowiedzi.
źródło
Prawdopodobnym powodem wystąpienia tego błędu jest prawdopodobnie dodanie / build folderu do pliku .gitignore lub generalnie nie sprawdzenie go w Git.
Więc kiedy Git push Master Heroku , folder kompilacji, do którego się odnosisz , nie zostanie wypchnięty do Heroku. I dlatego pokazuje ten błąd.
To jest powód, dla którego działa poprawnie lokalnie, ale nie podczas wdrażania w Heroku.
źródło