"İçerik-Güvenlik-Politikası meta etiketi bulunamadı." phonegap uygulamamdaki hata


94

Sistemimde Cordova 5.0 güncellemesinden sonra yeni uygulamalar oluşturuyorum. Uygulamamı bir cihazda test ettiğimde, konsol günlüğünde bir hata alıyorum:

No Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.

Baş kısmına meta ekliyorum

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>

Ancak yine, uygulama içi tarayıcı eklentisini ve diğer web sitesi bağlantılarından 7'sini kullandığım uygulamada aynı hatayı aldım.


3
cordova-plugin-whitelist- github.com/apache/cordova-plugin-whitelist eklentisini doğru bir şekilde kurdunuz mu? Bundan sonra, config.xml<allow-navigation href="http://*/*" />
Keval

1
Teşekkürler Keval, <allow-navigation href = "http: // * / *" /> ekledikten sonra şimdi uygulamam sorunsuz çalışıyor. Tekrar teşekkürler.


3
Kodda bir karakter eksik olduğunda bir hata oluşturulduğunda, SO neden altı karakterden daha az düzenlemelere izin vermiyor? Bunu düzeltmek oldukça kolay, sadece gelecekte başka birini birkaç saniye kurtarmaya çalışmaktı. Meta etiketinin içerik özniteliğinin sonunda çift tırnak eksik.
Jason D.

Yanıtlar:


86

Cordova eklenti beyaz listesini ekledikten sonra , uygulamanıza tüm web sayfası bağlantılarına veya belirli bağlantılara erişim izni vermesini istemeniz gerekir.

Bunu, uygulamanızın kök dizininde bulunan config.xml dosyanıza ekleyebilirsiniz :

Belgelerde tavsiye edilenler:

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

veya:

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

Eklentinin belgelerinden:

Gezinme Beyaz Listesi

Web Görünümü’nün hangi URL’lere gidilebileceğini kontrol eder. Yalnızca üst düzey gezinmeler için geçerlidir.

Tuhaflıklar: Android'de, http olmayan düzenler için iframe'ler için de geçerlidir.

Varsayılan olarak, yalnızca file: // URL'lerine gezinmeye izin verilir. Diğer URL'lere izin vermek için config.xml dosyanıza etiketler eklemelisiniz:

<!-- 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:*" />


38

Uygulamanızın head bölümüne bir CSP meta etiketi eklemelisiniz. index.html

Https://github.com/apache/cordova-plugin-whitelist#content-security-policy uyarınca

İçerik Güvenliği Politikası

Hangi ağ isteklerinin (görüntüler, XHR'ler, vb.) Yapılmasına izin verildiğini kontrol eder (doğrudan web görünümü aracılığıyla).

Android ve iOS'ta, ağ isteği beyaz listesi (yukarıya bakın) tüm istek türlerini filtreleyemez (örn. <video>& WebSockets engellenmez). Bu nedenle, beyaz listeye ek olarak, tüm sayfalarınızda bir İçerik Güvenlik Politikası <meta> etiketi kullanmalısınız .

Android'de, sistem web görünümünde CSP desteği KitKat ile başlar (ancak Crosswalk WebView kullanan tüm sürümlerde mevcuttur).

.htmlSayfalarınız için bazı örnek CSP bildirimleri :

<!-- 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">

CSP Bildirimi'ni eklediğimde, google harita için aşağıdaki kod parçası bu şekilde başarısız oluyor. Herhangi bir fikir ? var pos = new google.maps.LatLng (position.coords.latitude, position.coords.longitude); // satır 173 11-09 21: 17: 30.724: D / SystemWebChromeClient (25692): file: ///android_asset/www/index.html: Satır 173: Yakalanmamış Referans
Hatası


23

Meta etiketinizde hatalar var.

Senin:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>

Düzeltildi:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>

"Script-src" den sonra iki nokta üst üste işaretine ve meta etiketinin son çift tırnak işaretine dikkat edin.


3
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>ionic framework ile canlı yeniden yüklemeyi dahil ettiğimde çalışmayı durdurur, bu yüzden dışarıdaki diğerlerine dikkat edin
CommonSenseCode

@codePlusPlus, Ionic karaciğer yüklemesini tekrar etkinleştirmek http://localhost:35729için script-scr direktifine ve ws://localhost:35729connect-src direktifine ekleyin .
kolli

@kolli, yeni direktiflerin neye benzeyeceğini gösterebilir misin? bunların direktiflere nasıl ekleneceği açık değil.
jessewolfe

Bilginin orijinal gönderide olduğunu görüyorum. Ancak açıklığa kavuşturmak için: " Eklemek" script-src 'self' 'unsafe-inline' 'unsafe-eval'ile değiştirebileceğiniz anlamına gelir script-src 'self' http://localhost:35279 'unsafe-inline' 'unsafe-eval've içerik özniteliğinin sonuna ; script-src ws://localhost:35279
ayırıcı noktalı

Yukarıya düzeltme ... ikinci kısım için olmalı ; connect-src 'self' ws://localhost:35279. 'Self' i ekleyene kadar bir hata aldığımı unutmayın (CSP ihlali nedeniyle file: // <index.html yoluna> erişemedim).
jessewolfe

2

Benim için beyaz liste eklentisini yeniden yüklemek yeterliydi :

cordova plugin remove cordova-plugin-whitelist

ve sonra

cordova plugin add cordova-plugin-whitelist

Görünüşe göre Cordova'nın önceki sürümlerinden güncelleme başarılı olmadı.


1

Benim için sorun, cordova android ve ios platformlarının eski sürümlerini kullanıyor olmamdı . Yani android@5.1.1 ve ios@4.0.1 sürümüne yükseltme sorunu çözdü.

Şu belirli sürümlere yükseltebilirsiniz:

cordova platforms rm android
cordova platforms add android@5.1.1
cordova platforms rm ios
cordova platforms add ios@4.0.1

android 5.1.1 mi demek istediniz ?
mix3d

Hem @Maxim hem de Pierre-Alexis de Solminihac tavsiyelerini takip ettim ve sonunda Uygulamamın sorunsuz çalışmasını sağladım. Teşekkürler!
Zalakain

0

Bağlantıyla ilgili başka bir sorun var. Bazı android sürümleri bağlanabilir ancak bazıları bağlanamaz. Yani başka bir çözüm var

AndroidManifest.xml'de:

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

'Android: usesCleartextTraffic = "true"' eklemeniz yeterli

ve sorun nihayet çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.