SRI 的完整性和跨域值是不是保存在 package.json 或其他地方?

Posted

技术标签:

【中文标题】SRI 的完整性和跨域值是不是保存在 package.json 或其他地方?【英文标题】:Are SRI's integrity and crossorigin values kept in package.json or elsewhere?SRI 的完整性和跨域值是否保存在 package.json 或其他地方? 【发布时间】:2018-12-24 19:18:11 【问题描述】:

这是 bootstrap 的官方 CDN 样式表:

<link rel="stylesheet" 
      href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css"
      integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B"
      crossorigin="anonymous">

但是,在我的标记中,我没有对版本进行硬编码,因为它可能会发生变化,所以我将它从我的构建系统或应用程序中提取出来。一个虚构的例子:

<link rel="stylesheet" href="https://foo.bar.com/jquery/$VERSION/all.min.js" />

如您所见,$VERSION 没有硬编码。所以我可以在构建过程中更改我使用的版本(package.json),而不必编辑我的应用程序。

现在我想以同样的方式添加integrity。我希望我能在package.json 中找到它,但是对于 bootsrap 来说,它不存在。我也假设其他软件包。

我知道我可以像这样calculate it:

echo -n "alert('Hello, world.');" | openssl dgst -sha384 -binary | openssl base64 -A

但我不想让我的构建系统过于复杂。

有没有什么地方可以让我得到这个值,而不必对其进行硬编码?我自动从我的项目的package.json(或node_modules/bootstrap 中的那个)中提取版本,所以我希望为完整性做类似的事情。

【问题讨论】:

【参考方案1】:

由于无法从 package.json 或包目录中的其他位置轻松访问该值,因此我使用 s-s-ri npm module。

更多工作,但似乎没有更好的方法。

【讨论】:

以上是关于SRI 的完整性和跨域值是不是保存在 package.json 或其他地方?的主要内容,如果未能解决你的问题,请参考以下文章

SRI 哈希不是预期的

ajax技术和跨域问题

ajax技术和跨域问题

使用 API(带有两个 jQuery 版本和跨域的页面)

即使在 SRI 完整性失败后仍执行 Javascript

如何获得 aspnetcdn.com 的 SRI(子资源完整性)哈希?