[英]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的人,請參閱以下內容:
我懷疑除了重寫使用內聯代碼或動態評估代碼(適用於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.