我从leafletjs.com下载了最新版本的传单(1.3.1)并注意到它与unpkg.com不同:https://unpkg.com/leaflet@1.3.1/dist/leaflet.js
leaflet.js的第二行是:
unpkg.com:
* Leaflet 1.3.1, a JS library for interactive maps. http://leafletjs.com
来自leafletjs.com的zip文件:
* Leaflet 1.3.1+Detached: ba6f97fff8647e724e4dfe66d2ed7da11f908989.ba6f97f, a JS library for interactive maps. http://leafletjs.com
为什么?我修改了一个leafletjs.com示例,使用我刚刚下载的传单的本地副本。它不起作用,因为链接完整性失败,所以我发现文件是不同的。它们不应该相同吗?
我克隆了git存储库和check-out标签v1.3.1。提交校验和与zip文件中显示的相同:ba6f97fff8647e724e4dfe66d2ed7da11f908989
答案 0 :(得分:1)
奇怪的是,发布过程中可能存在一个错误,使得下载zip文件包含的版本与npm / unpkg上发布的版本略有不同。
是的,你是对的,这些文件应该是相同的。
作为一种解决方法,您只需本地保存从unpkg.com CDN获得的版本。
v1.3.1
标记中的文件是正确的,您也可以使用这些文件。
对于SRI检查,当您使用托管在控件之外的其他位置的文件(如CDN)时,这很有趣。如果外部主机遭到入侵并且文件被感染,则SRI检查将拒绝它们,从而确保访问者的安全。
如果您使用本地托管文件,即在与HTML页面相同的服务器中,SRI就不那么有趣了:如果攻击者可以访问您的服务器并感染您的文件,他/她可能只是感染您的HTML页面并修改任何SRI哈希,或者反正任何东西。
至于为什么zip中的文件没有通过SRI但是提到了与标签发布相同的提交哈希,这只是构建文件时环境设置的问题。两个版本都是从同一个提交构建的。但是zip中的文件可能是在没有“release”标志的情况下构建的,使得它的介绍性打印略有不同(它提到了提交哈希而不仅仅是标记名称),因此它的SRI哈希是不同的,即使代码内容是相同。