2014-10-23 13 views
28

Bir test sitesinde yeni İçerik Güvenliği İlkesi (CSP) HTTP üstbilgilerini kullanmaya çalışıyorum. CSM'yi Modernizr ile birlikte kullandığımda CSP ihlali hataları alıyorum.Modernizr İçerik Güvenlik Politikası (CSP) İhlal Hataları neden

Content-Güvenlik-İlkesi: Bu kullanıyorum CSP politikasıdır varsayılan-SRC öz '; script-src 'kendini' ajax.googleapis.com ajax.aspnetcdn.com; style-src 'kendini'; img-src 'kendini'; font-src 'kendini'; rapor-uri /WebResource.axd?cspReport=true

Bunlar Chrome tarayıcısı konsolundan hataları şunlardır:

Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self'". 
Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. 

window.Modernizr.injectElementWithStyles - modernizr-2.7.2.js:134 
window.Modernizr.tests.touch    - modernizr-2.7.2.js:457(anonymous function) 
modernizr-2.7.2.js:949(anonymous function) - modernizr-2.7.2.js:1406 

Ben Github Modernizr sitesinde following workaround keşfetti. Ancak, geçici çözüm ilk olarak Mart ayında ortaya konmuş ve biraz Google-Fu yapmıştır. Bu konuyla ilgili herhangi bir düzeltme veya geçici çözüm bulamıyorum.

Bu hatayı alabilen güvensiz satır içi yönergesini ekleyebileceğimi biliyorum, ancak bu da güvenli olmayan kodun çalıştırılmasını ve ilk etapta CSP kullanımını devre dışı bırakmasını sağlar. Herhangi bir çözümü olan var mı?

Güncelleme - CSP

CSP nedir tüm büyük tarayıcılar (Including Edge) tarafından desteklenen bir HTTP başlığıdır. Temel olarak, içeriğin beyaz bir listesini içeren listeyi oluşturmak için tarayıcının kullanımına izin verilir. Daha fazla bilgi edinin here veya Mozilla'nın CSP here ve here belgelerini okuyun.

Güncelleme - Yardım Vurgu CSP

CSP all browsers üzerinde artık kullanılabilir (desteği eklendi Kenar, yay!) Ve web güvenliği konusunda ileri onun devasa bir sıçrama. CSP için daha fazla üçüncü parti desteği almak ilgilenenler için şu bkz:

  1. Modernizr support for CSP
  2. Visual Studio support for CSP. Çevrim içi JavaScript'i kullandığı için CSP etkinleştirilmişse tarayıcı bağlantısının çalışmadığını unutmayın.
  3. Visual Studio Web Essentials Extension support for CSP. Web Essentials, özellikleri genellikle Visual Studio'nun bir sonraki sürümünde sona eren bir Visual Studio eklentisidir.
+0

Neden bir işlevsellik engellemek için seçmeli ve sonra bu işlevselliği kullanarak bir kitaplık ile sorun? – dandavis

+1

Engellenen işlev, güvenlik açıklarına neden olabilecek çevrimiçi CSS ve JavaScript'tir. Ayrı CSS ve JavaScript dosyalarını kullanmak gayet iyi. Modernizr, testlerini yapmak için astar tekniğini kullanır. Ayrı dosyalar sağlasa da işe yarayabilir. Daha kapsamlı bir CSP anlayışı için https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Introducing_Content_Security_Policy ve https://developer.mozilla.org/en-US/docs/ Web/Güvenlik/CSP –

+3

Vay, bu güvenli ortamlarda Modenizr için toplam anlaşma kesici. – Keith

cevap

5

Modernizr'in satır içi kod kullanan veya dinamik olarak değerlendirilen kodları (hem JS hem de CSS için geçerli olan) bölümlerini yeniden yazmaktan başka bir çözüm bulunmadığından şüpheleniyorum. AngularJS ngCsp deneyimleri burada yararlı olabilir.

-1

Güvenli olmayan satır içi kullanmak zorunda kalmadan bir düzeltme buldum.

tek bir satırında unminimized Modernizr değiştirebilirsiniz:

fakeBody = body || document.createElement('body'); 

dönüştürme IE9, Firefox ve Chrome eserlerin

fakeBody = document.createElement('body'); 

için.

İlgili konular