簡體   English   中英

內容安全策略:CSP 是否應該包含外部腳本的哈希?

[英]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 標頭)。

關於散列外部 JS 的 CSP 規范

Mozilla 在他們的script-src文檔中聲明。 注意最后一句話

來自: https : //developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

'<哈希算法>-<base64-value>'

腳本或樣式的 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.

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