Asp.net-Core

ASP.NET Core 腳本標記幫助程序 asp-fallback-src 未能通過完整性檢查

  • December 26, 2018

當我使用 ASP.NET Core Script Tag Helper 測試回退到本地文件時收到以下錯誤:

無法在資源“ http://localhost:48888/js/jquery.min.js ”的“完整性”屬性中找到有效的摘要,計算出的 SHA-256 完整性為“oozPintQUive6gzYPN7KIhwY/B+d8+5rPTxI1ZkgaFU=”。該資源已被阻止。

本地文件是文本等於 CDN 版本,但不是二進制等於。這成為一個問題,因為完整性雜湊不僅與主源進行比較,還與備用源進行比較,並且由於生成不同的雜湊而導致檢查失敗。

這是一個例子:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"
   asp-fallback-src="~/js/jquery.min.js"
   asp-fallback-test="window.jQuery"
   crossorigin="anonymous"
   integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
</script>

只要瀏覽器可以訪問 Google 的 CDN,就可以正常工作。但是,如果您將源更改為錯誤值,例如尋找不存在的版本(例如“3.9.9”),這會導致它回退到本地文件。該本地文件將無法載入,因為它們不是二進制相等的(不同的雜湊)。

理想情況下,完整性檢查不會應用於本地文件,因為我們信任受我們控制的本地文件。另一種方法是我們可以為本地回退定義一個不同的散列。

這些選項中的任何一個都可用嗎?如果沒有,還有其他解決方法嗎?我試圖避免從 CDN 手動複製以使它們匹配,因為未來更新需要額外的維護工作。我想使用包管理器。

隨著最近從 2018 年 12 月發布的ASP.NET Core 2.2.0LinkTagHelperScriptTagHelper獲得了新的布爾屬性asp-suppress-fallback-integrity。當設置為 true 時,回退資源將繞過完整性檢查。

當 CDN 和 NPM 分發是二進制不同時,這是必要的,例如 Font Awesome 5 的情況。

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous"
         asp-fallback-href="~/lib/font-awesome/css/all.min.css"
         asp-fallback-test-class="fab" asp-fallback-test-property="font-style" asp-fallback-test-value="normal"
         asp-suppress-fallback-integrity="true" />

就個人而言,我認為對本地資源進行完整性檢查沒有任何好處。它的維護成本很高,並且存在使回退失效的高風險,這是災難性的,並且沒有復雜的測試,需要在每個新版本中模擬失敗的 CDN,很難發現。因此,我更喜歡將此屬性添加到所有資源中。

引用自:https://stackoverflow.com/questions/50610252