为什么unpkg.com和leafletjs.com之间的leaflet.js 1.3.1有所不同?

时间:2018-02-16 17:53:47

标签: leaflet

我从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

1 个答案:

答案 0 :(得分:1)

奇怪的是,发布过程中可能存在一个错误,使得下载zip文件包含的版本与npm / unpkg上发布的版本略有不同。

是的,你是对的,这些文件应该是相同的。

作为一种解决方法,您只需本地保存从unpkg.com CDN获得的版本。

v1.3.1标记中的文件是正确的,您也可以使用这些文件。

对于SRI检查,当您使用托管在控件之外的其他位置的文件(如CDN)时,这很有趣。如果外部主机遭到入侵并且文件被感染,则SRI检查将拒绝它们,从而确保访问者的安全。

如果您使用本地托管文件,即在与HTML页面相同的服务器中,SRI就不那么有趣了:如果攻击者可以访问您的服务器并感染您的文件,他/她可能只是感染您的HTML页面并修改任何SRI哈希,或者反正任何东西。

至于为什么zip中的文件没有通过SRI但是提到了与标签发布相同的提交哈希,这只是构建文件时环境设置的问题。两个版本都是从同一个提交构建的。但是zip中的文件可能是在没有“release”标志的情况下构建的,使得它的介绍性打印略有不同(它提到了提交哈希而不仅仅是标记名称),因此它的SRI哈希是不同的,即使代码内容是相同。