Aşağıdaki İçerik Güvenlik Politikası direktifini ihlal ettiği için komut dosyasını yüklemeyi reddetti


108

Uygulamamı 5.0.0 ( Lollipop ) üzeri Android sistemine sahip cihazlara dağıtmaya çalıştığımda , şu tür hata mesajlarını almaya devam ettim:

07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): file: ///android_asset/www/index.html: Satır 0: Aşağıdaki İçeriği ihlal ettiği için 'http: // xxxxx' komut dosyasını yüklemeyi reddetti Güvenlik Politikası direktifi: "script-src 'self' 'unsafe-eval' 'unsafe-inline'". 07-03 18: 39: 21.621: I / chromium (9132): [INFO: CONSOLE (0)] "Aşağıdaki İçerik Güvenliği Politikası direktifini ihlal ettiği için 'http: // xxx' komut dosyasını yüklemeyi reddetti:" komut dosyası- src 'self' 'unsafe-eval' 'unsafe-inline' ".

Ancak, 4.4.x Android sistemi ( KitKat ) ile mobil cihaza dağıtırsam , güvenlik politikası varsayılan olanlarla çalışır:

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

Sonra düşündüm, belki de şöyle bir şeye geçmeliyim

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

Temel olarak, her iki seçenek de benim için çalışmıyor. Bu sorunu nasıl çözebilirim?


Sorunuma çok benziyor. JSON dosyasını "şu İçerik Güvenlik Politikası direktifini ihlal ettiği için alamıyorum:" connect-src 'self' ""
Michael R

1
@MichaelR Tampermonkey eklentisi veya diğer her şey gibi JS aracılığıyla API'den bazı JSON bilgilerini almak istiyorsanız Bu eklentiyi chrome.google.com/webstore/detail/disable-content-security/… kullanabilir ve istediğiniz zaman CSP kontrolünü devre dışı bırakabilirsiniz. bir şey. Güvenli olmasa da bazı durumlarda işe yarayabilir. Bu cevabı buraya gönderiyorum çünkü hatamı arıyordum ve bu konu ilk olarak Google'da gösteriliyor.
Eryk Wróbel

Yanıtlar:


69

Meta etiketinizi aşağıdaki ile değiştirmeyi deneyin:

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

Ya da sahip olduklarınıza ek olarak, http://*her ikisine de eklemelisiniz style-srcve script-srcyukarıda görüldüğü gibi 'ben' den sonra eklenmiştir.

Sunucunuz Content-Security-Policybaşlık içeriyorsa, başlık metayı geçersiz kılar.


6
Burada tanımladığınız CSP'yi anladığım kadarıyla, saldırıları önlemek için her türlü güvenliği devre dışı bırakır , komut dosyası etiketlerine izin verir ve ayrıca herhangi bir etki alanından ve ayrıca güvenli olmayan bağlantılar üzerinden komut dosyaları yükler. bkz developers.google.com/web/fundamentals/security/csp Yoksa bşin alırım yanlış? Çoğu durumda (geliştirme ve hata ayıklama dışında) istediğiniz şeyin bu olmadığını tahmin ediyorum ... değil mi?
Peter T.


11
Bu yanıta olumsuz oy verirdim çünkü CSP'yi kullanırken '' unsafe-inline '' unsafe-eval '' kullanmanızı öneriyorsunuz!
HerTesla

40

MagngooSasa verdiği öz cevap hile yaptı ama başkasının cevap anlamaya çalıştıkları için, burada birkaç biraz fazla ayrıntı açıklanmıştır:

Cordova uygulamalarını Visual Studio ile geliştirirken , uzak bir JavaScript dosyasını içe aktarmayı denedim [burada http://Guess.What.com/MyScript.js], ancak başlıkta bahsedilen hatayı görüyorum.

İşte meta etiketi önce projenin index.html dosyasında,:

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

Uzak bir komut dosyasının içe aktarılmasına izin vermek için düzeltilmiş meta etiket:

<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';** ">

Ve daha fazla hata yok!


15

Şununla çözüldü:

script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';

47
lütfen biraz daha açıklar mısın? Metanın tamamını yapıştırabilir misin?
Tony


3
Bu, herhangi bir kötü amaçlı eklentinin / xss'in satır içi olarak enjekte etmesine ve komut dosyalarını değerlendirmesine izin vererek komut dosyaları için CSP'yi etkin bir şekilde devre dışı bırakır, bu da CSP'nin etkinleştirilmesi amacını tamamen ortadan kaldırır.
IncredibleHat

8

Eksiksiz bir açıklama arayanlar için, İçerik Güvenliği Politikasına bir göz atmanızı tavsiye ederim: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .

"Https: //mybank.com'dan gelen kod yalnızca https: //mybank.com'un verilerine erişebilmelidir ve https: //evil.example.com'a kesinlikle erişime kesinlikle izin verilmemelidir. Her kaynak, web'in geri kalanı "

XSS saldırıları, tarayıcının uygulamanızın kodunu başka bir web sitesinden indirilen koddan ayırt edememesine dayanır. Bu nedenle, Content-Security-PolicyHTTP üstbilgisini kullanarak, içerik indirmenin güvenli olduğunu düşündüğünüz içerik kaynaklarını beyaz listeye eklemelisiniz .

Bu politika, her biri belirli bir kaynak türü veya politika alanı için politikayı tanımlayan bir dizi politika yönergesi kullanılarak açıklanmaktadır. Politikanız, kendi politikalarına sahip olmadıklarında diğer kaynak türleri için bir geri dönüş olan bir default-src politika yönergesi içermelidir.

Dolayısıyla, etiketinizi şu şekilde değiştirirseniz:

<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';** ">

Sen Javacsript kodu (yürütülmesini yetkisi olduğunu söylediğini script-srckökenleri) 'self', http://onlineerp.solution.quebec, 'unsafe-inline', 'unsafe-eval'.

Sanırım ilk ikisi sizin kullanım durumunuz için tamamen geçerli, diğerlerinden biraz emin değilim. 'unsafe-line've 'unsafe-eval'bir güvenlik sorunu oluşturduğundan, bunlara çok özel bir ihtiyacınız olmadıkça bunları kullanmamalısınız:

"Eval ve onun metin-JavaScript kardeşleri uygulamanız için tamamen gerekliyse, bunları bir script-src direktifine izin verilen kaynak olarak 'unsafe-eval' ekleyerek etkinleştirebilirsiniz. Ancak yine, lütfen yapmayın. dizeleri yürütme yeteneği, bir saldırganın sitenizde yetkisiz kod yürütmesini çok daha zor hale getirir. " (Mike West, Google)


Neden localhost sayfamda başka bir ana bilgisayar komut dosyası ekleyebiliyorum?
mqliutie

Sunucunuzda barındırılmayan ancak "güvendiğiniz" 3. taraf komut dosyalarını yeniden kullanmak alışılmadık bir durum değildir
Rocío García Luque

8

Tam izin dizesi

Önceki cevaplar sorunumu çözmedi çünkü blob: data: gap:aynı anda anahtar kelimeleri içermiyorlar ; işte bunu yapan bir dize:

<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:;">

Uyarı: Bu, belgeyi birçok istismara maruz bırakır. Kullanıcıların konsolda kod yürütmesini veya Cordova uygulaması gibi kapalı bir ortamda olmalarını engellediğinizden emin olun .


1
Örneğin konsolda JQuery'yi şu şekilde yüklemeye çalışıyorsanız bu doğru cevaptır: stackoverflow.com/a/31912495/137948
Will Sheppard

7

Bunu kullandık:

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

4

Bu konuda biraz daha detaylandırmak için

script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';

meta etiketine böyle

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

hatayı düzeltir.


2

Bu politikayı yok saymak için meta etiket eklemek bize yardımcı olmuyordu çünkü web sunucumuz Content-Security-Policyyanıta başlığı enjekte ediyordu .

Bizim durumumuzda, Tomcat 9 Java tabanlı bir uygulama için web sunucusu olarak Ngnix kullanıyoruz . Web sunucusundan, tarayıcıyı izin vermemeye yönlendiriyor inline scripts, bu nedenle geçici bir test için Content-Security-Policyyorum yaparak kapattık .

Ngnix'te nasıl kapatılır

  • Varsayılan olarak, ngnix ssl.conf dosyasında , yanıta bir başlık eklenir:

    #> 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';";

  • Bu satırı sadece yorumlayıp ngnix'i yeniden başlatırsanız, başlığı yanıta eklememelidir.

Güvenlik veya üretim konusunda endişeleriniz varsa lütfen bunu takip etmeyin, bu adımları yalnızca test amacıyla kullanın ve devam edin.


-1

Bu hatayı almanızın olası nedeni, büyük olasılıkla / build klasörünü .gitignore dosyanıza eklemiş olmanız veya genel olarak Git'e eklememiş olmanızdır.

Yani Git Heroku ustasını ittiğinizde , referans verdiğiniz derleme klasörü Heroku'ya gönderilmez. İşte bu yüzden bu hatayı gösteriyor.

Yerel olarak düzgün çalışmasının nedeni budur, ancak Heroku'ya konuşlandırıldığınızda değil.


Bende de aynı sorun var. bu yüzden .gitignore dosyasından / build klasörünü kaldırmayı mı öneriyorsunuz?
Hoang Minh
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.