[英]Content Security Policy: Should a CSP contain hashes for external scripts?
我想知道Content-Security-Policy
標頭是否應該/可以包含外部 JavaScript 文件的哈希值(也就是帶有src
屬性的標簽<script src="foo.js"></script>
)。
在基於 Chromium 的瀏覽器和 Mozilla Firefox 中,我的外部腳本被阻止,即使在Content-Security-Policy
標頭中包含所有這些腳本的哈希值:
script-src 'sha256-Dxn+cR58x5haydQ1S/lvgMBLRahDCNxsakeubYGDJD0=' 'sha256-WiXxwK6878G5m29xzbpoI/6mHv7Otw1epCuigPupglA=' 'sha256-B5Xt87JgO41oTYQ2MabCc4UUuiVbcT/ingSs4HJHt1U=';
我也試過
script-src 'strict-dynamic' 'sha256-Dxn+cR58x5haydQ1S/lvgMBLRahDCNxsakeubYGDJD0=' 'sha256-WiXxwK6878G5m29xzbpoI/6mHv7Otw1epCuigPupglA=' 'sha256-B5Xt87JgO41oTYQ2MabCc4UUuiVbcT/ingSs4HJHt1U=';
我的 HTML 包含外部腳本:
...
<!-- These are Webpack generated scripts built with the Angular CLI -->
<script src="runtime.78e54b12002286474edb.js"></script>
<script src="polyfills.73e66b75888e8a86f685.js"></script>
<script src="main.4deb3029247017da53f3.js"></script>
</body>
</html>
我希望瀏覽器對外部 JavaScript 文件的內容進行散列,並將這些散列與在Content-Security-Policy
標頭的script-src
屬性中找到的散列進行比較(從而根據我的服務器列入白名單的內容驗證任何已交付 JavaScript 文件的完整性CSP 標頭)。
Mozilla 在他們的script-src
文檔中聲明。 注意最后一句話
來自: https : //developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src
腳本或樣式的 sha256、sha384 或 sha512 哈希。 此源的使用由用破折號分隔的兩部分組成:用於創建散列的加密算法和腳本或樣式的 base64 編碼散列。 生成哈希時,不要包含 或 標簽,並注意大小寫和空格很重要,包括前導或尾隨空格。 有關示例,請參閱不安全的內聯腳本。 在 CSP 2.0 中,這僅適用於內聯腳本。 CSP 3.0 允許在外部腳本的 script-src 的情況下使用它。
您提到的 MDN 文檔只是流行信息,因此不包含詳細信息。
根據CSP3 規范,僅當<script>
元素包含與策略中的散列匹配的完整性元數據時,才允許它們執行。
將完整性=屬性添加到腳本標記中,如下所示:
<!-- These are Webpack generated scripts built with the Angular CLI -->
<script src="runtime.78e54b12002286474edb.js" integrity="sha256-...."></script>
<script src="polyfills.73e66b75888e8a86f685.js" integrity="sha256-...."></script>
<script src="main.4deb3029247017da53f3.js" integrity="sha256-...."></script>
並且'hash-value'
將開始工作。 但是,不幸的是,僅在Chrome 中。 Safari 和 Firefox 還沒有實現這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.