簡體   English   中英

Modernizr導致內容安全策略(CSP)違規錯誤

[英]Modernizr Causes Content Security Policy (CSP) Violation Errors

我試圖在測試站點上使用新的內容安全策略(CSP) HTTP標頭。 當我將CSP與Modernizr結合使用時,我得到了CSP違規錯誤。 這是我使用的CSP策略:

Content-Security-Policy: default-src'self'; script-src'self'ajax.googleapis.com ajax.aspnetcdn.com; style-src'self'; img-src'self'; font-src'self'; report-uri /WebResource.axd?cspReport=true

以下是Chrome瀏覽器控制台中的錯誤:

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

我在Github Modernizr網站上發現了以下解決方法 但是,解決方法是在3月份首次提出並做了一點Google-Fu,我找不到解決此問題的方法或解決方法。

我知道我可以包含unsafe-inline指令,它可以解決這個錯誤,但這也使得不安全的代碼能夠運行並且首先取消CSP的使用。 有沒有人有任何解決方案?

更新 - 什么是CSP

CSP是所有主流瀏覽器( 包括Edge )支持的HTTP頭。 基本上它是允許瀏覽器用於呈現頁面的白色內容列表。 在這里了解更多信息在此處此處閱讀Mozilla的CSP文檔。

更新 - 幫助突出顯示CSP

CSP現在可以在所有瀏覽器上使用 (Edge添加支持,是的!)以及它在Web安全性方面的巨大飛躍。 對於那些有興趣獲得更多第三方支持CSP的人,請參閱以下內容:

  1. Modernizr對CSP的支持
  2. Visual Studio對CSP的支持 請注意,如果您啟用了CSP,則瀏覽器鏈接不起作用,因為它使用內聯JavaScript。
  3. Visual Studio Web Essentials Extension對CSP的支持 Web Essentials是一個Visual Studio插件,其功能通常最終出現在Visual Studio的下一個版本中。

我懷疑除了重寫使用內聯代碼或動態評估代碼(適用於JS和CSS)的Modernizr部分之外,沒有其他解決方案。 AngularJS ngCsp的經驗可能在這里很有用。

我找到了一個修復,而不必使用unsafe-inline。

您可以在一行修改未最小化的Modernizr:

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

轉換成

fakeBody = document.createElement('body');

適用於IE9,Firefox和Chrome。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM