问题标签 [subresource-integrity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
177 浏览

javascript - 是否可以将 SRI 用于 recurly.js cdn?

recurly.js可以与 SRI 一起使用integrity

我注意到这个问题,它关闭了完整性哈希包含在发行说明中,它们是. 然而,当我尝试在 codepen 上对此进行测试时:

我在 javascript 控制台中收到此错误:

子资源完整性:资源“ https://js.recurly.com/v3/recurly.js ”具有完整性属性,但该资源要求请求启用 CORS 以检查完整性,但事实并非如此。资源已被阻止,因为无法强制执行完整性。

我是否遗漏了什么或者 Recurly 没有在该端点上启用 CORS?

0 投票
1 回答
1746 浏览

cdn - 子资源完整性真的有效吗?

我决定将 SRI 添加到我们的 CDN 脚本中,但我想测试它是否有效。如果我手动更改哈希脚本仍然加载。我期待控制台中出现某种错误代码或其他内容。

例如,这是正确的哈希:

如果我然后将每个 sha 哈希中的第一个字符更改为:

我希望它会失败。但事实并非如此。在 Firefox 58.0.2 和 Chrome 64.0.3282.140 中测试,两者都支持 SRI。缓存已关闭,我可以在开发人员工具中看到每次都重新获取脚本。

我还能做些什么来验证是否使用了 SRI?我从根本上误解了什么......?

0 投票
0 回答
338 浏览

jquery - webjars 3.3.1 jquery.min.js 与 CDN 的 3.3.1 jquery.min.js 不同;不匹配的子资源完整性 SRI

我注意到 3.3.1 jquery.min.js 在我的 webjar 和 CDN 中是不同的。他们有不同的 SRI。我对其进行了调查,并注意到文件并不完全是二进制等效的。

鉴于 SRI 很重要: - 为什么文件会有所不同?

以下是如何复制:

会得到你(不同的大小):

diff 将显示附加行:

0 投票
1 回答
467 浏览

browser - Web 浏览器是否以不同的方式缓存具有子资源完整性 (SRI) 的资源?

我认为在资源上指定子资源完整性哈希应该允许 Web 浏览器更积极地缓存,并且基本上总是重用资源的本地副本。

是否在浏览器中实现(或至少“计划实现”)对 SRI 资源的更强缓存因此,例如点击“[刷新页面]”按钮仍然会使浏览器重用缓存的资源?或者不是吗?如果不是,那是不是因为一些重要的原因?或者只是“还没有,但也许有一天”?

0 投票
2 回答
1472 浏览

browser - Edge17 - SEC7136 - 源未能通过资源的完整性检查

在一个 jekyll 网站中,我添加了一个插件(http://flexslider.woothemes.com/),在 Edge16 及以下浏览器中一切正常,但是,在 Edge17 中,我看到了控制台消息:

SEC7136: [Integrity] The origin '[insert url]' failed an integrity check for a style resource at '[url]'

这个错误是关于什么的?有问题的文件(在这种情况下是 CSS 文件)是如何导致 Edge17 而不是以前版本的完整性问题的?

谢谢

0 投票
1 回答
132 浏览

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

这是 bootstrap 的官方 CDN 样式表:

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

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

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

我知道我可以这样计算

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

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

0 投票
1 回答
1251 浏览

html - 最佳 SRI 哈希大小是多少?

我最近发现了以下漂亮的小站点,用于为外部加载的资源生成子资源完整性 (SRI) 标签。例如,输入最新的 jQuery URL ( https://code.jquery.com/jquery-3.3.1.min.js ),会得到以下<script>标签:

<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8= sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT sha512-+NqPlbbtM1QqiK8ZAo4Yrj2c4lNQoGv8P79DPtKzj++l5jnN39rHA/xsqn8zE9l0uSoxaCdrOgFs6yjyfbBxSg==" crossorigin="anonymous"></script>

我了解 SRI 散列的用途,并且我知道它们可以使用不同的散列大小(256 位、384 位或 512 位),但我以前从未见过像这样同时使用所有三个。深入研究MDN 文档,我发现

一个完整性值可能包含多个由空格分隔的哈希值。如果资源与其中一个哈希值匹配,则将加载该资源。

但是这种匹配究竟是如何进行的呢?是时候在一篇 SO 帖子中提出多个问题了……

  1. 浏览器是否首先尝试匹配最长的哈希,因为它更安全,或者最短的哈希,因为它更快?
  2. 真的会期望一个哈希匹配而不是所有三个(除了开发人员错误输入哈希的微不足道的情况)吗?
  3. 提供所有三个哈希而不是只提供一个有什么好处?
  4. 类似于#1,如果你只提供一个哈希值,你应该使用哪个?我通常会看到网站(例如Bootstrap)在其示例代码中提供 sha384 值。那是因为它在中间,不是太大,也不是太小?
  5. 出于好奇,该属性是否可以用在和integrity旁边的任何标签上。我特别想知道多媒体标签,如,等。<script><link><img><source>
0 投票
1 回答
1366 浏览

es6-modules - es6 import 或 worker 的子资源完整性

<script>接受integrity属性,所以我可以安全地加载一个模块:

但是在脚本中加载模块时如何保证安全呢?

  • 带进口:
  • 动态导入:
  • 甚至网络工作者:
0 投票
1 回答
324 浏览

spring - Angular2+对本地脚本文件使用完整性参数

我在 angularjs 的资产文件夹中有 2 个脚本。我使用https://hash.online-convert.com/sha384-generator为他们生成了完整性哈希。在我的本地主机中,一切正常。但是在服务器中只有 IE 可以工作,但是 firefox 和 chrome 告诉 hash 与内容不匹配。以下是如何包含文件的示例:

API 使用 Java Spring 实现,并且还添加了此安全标头:

为什么 firefox 和 chrome 不能使用网络服务器中的完整性哈希正确验证?我错过了什么吗?

0 投票
1 回答
340 浏览

jquery - Wordpress jquery 1.12.4的哈希不匹配

我正在使用最新的(4.9.8)WordPress,目前正在为<script>标签添加完整性属性。的版本/wp-includes/js/jquery/jquery.js1.12.4。用于此的 SRI(哈希)是

sha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=.

jquery 站点Cloudflare CDN1.12.4上的版本具有 SRI

sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=

代码看起来缩小了,但 SRI 也不匹配缩小版本。Cloudflare 和 jquery 站点上的 SRI 属性也与缩小版本相匹配。

  • 有谁知道为什么会有差异?
  • WordPress 开发人员自定义 jquery(标准)库是否常见?