问题标签 [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 投票
2 回答
632 浏览

subresource-integrity - 子资源完整性和性能

我正在阅读有关子资源完整性的信息,但我担心性能损失。这(必须在执行每个文件之前对其进行哈希处理)如何减慢页面加载速度,尤其是在具有低级 CPU 的设备上?

0 投票
0 回答
940 浏览

requirejs - RequireJS 和子资源完整性 (SRI)

有谁知道如何为位于 RequireJS 配置文件的“路径”区域中的 JS URL 设置子资源完整性 (SRI) 属性?

RequireJS 在他们的网站上说它支持 SRI,但我找不到任何关于如何实现它的信息。

0 投票
1 回答
55 浏览

html - 如何加密验证网页要求?

如何以加密方式验证 HTML 中的网页要求?

例如,如果我在(可能不受信任的)内容交付网络上有一些外部资源,如图像、样式表或(最重要的)脚本,是否可以强制客户端浏览器以加密方式验证下载资源的哈希值使用前?是否有一些 HTML 属性或 URL 方案,或者是否必须手动编写一些 JavaScript 才能做到这一点?

基本原理是,在通过 HTTPS 提供的 HTML 中提供散列可以额外防御受损(或故障)CDN-s。

关于 SO 的相关问题:

0 投票
0 回答
645 浏览

javascript - 不同SRI导致不同浏览器的可能原因?

一个客户想在他们网站上的所有 CSS 和 JS 资产上使用 SRI,但他们在 Firefox 中遇到了一个非常奇怪的问题。他们的服务器是一个 apache2 实例,提供 HTML 内容。*对于任何 ( ) 源,整个虚拟主机都启用了 CORS 。没有缓存或 CDN。

有问题的两个文件是

  • company.min.css
  • company.min.js

为了生成 SRI 哈希,最初使用了SRI 哈希生成器。它的输出有多种算法,如下所示:

CSS 文件类似。这些被插入到 HTML 中,并在几个不同的浏览器中对该站点进行了测试,结果如下:

  • 适用于 Chrome (/Canary)、Opera、Edge 甚至 IE
  • 在 Firefox (/Nightly) 中不起作用

Firefox 只是不喜欢 CSS,说 SHA512 与资源不匹配。无论出于何种原因,它都能很好地处理 JS 文件。

我确认(使用 OpenSSL)上述工具生成的哈希值确实是正确的,而且它在几乎所有浏览器中都可以使用,除了 Firefox 之外的事实让我开始思考。

因此,我尝试使用 Mozilla 自己的 SRI 工具srihash.org对资源进行哈希处理,这是 Mozilla 从他们关于 SRI的博客文章中推荐的。

现在有点奇怪了。

  • 对于 CSS 文件,srihash.org 生成一个完全不同的哈希。
  • 对于 JS 文件,两个生成器的哈希值相同,并且将我的离线哈希值与 OpenSSL 匹配。

但是,如果我将 CSS 链接替换为 Mozilla 生成的链接,结果如下:

  • 在火狐中工作
  • 在其他任何地方都不起作用,因为哈希不匹配

问题

怀疑这是 Firefox 的 SRI 实现中的一些问题。实现的相关讨论是here,但它没有给出资源在Firefox中不同的任何原因。但我不是严格的网络开发人员,那么在不同的浏览器中,不同的 SRI 哈希是否有任何可能的(记录的)原因?

我无法透露确切的服务器/资源。这是一个一般性问题,因此,如果您有任何客观经验或参考授权来源记录了 SRI 实施中的差异,请回答。

0 投票
2 回答
225 浏览

javascript - srihash.org 不适用于 cesiumjs.org 的 .js 文件

我使用srihash.org为 URL https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.js生成了以下代码:

在尝试加载包含完整性检查脚本的页面时,我在 Windows 上的 Chrome 50 中收到以下错误:

无法在资源“ https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.js ”的“完整性”属性中找到有效的摘要,计算出的 SHA-256 完整性为“vGCl/67DuYY5UzwNQGGpYh2gztA4PhvD+I4pcX7TWcU=”。该资源已被阻止。

我还尝试手动生成哈希(同样,在 Windows 上,openssl-1.0.2h),使用:

导致:

当使用 Chrome 加载 Cesium.js 时,此哈希有效。然而,这提出了两个哈希中哪一个是正确的问题......排除了 MITM 攻击的可能性,我认为它与行尾或编码有关。Cesium.js似乎有 Windows 行结尾,在 Chrome 中加载它的 HTTP 响应附在下面。

如何解释这两种哈希之间的区别,哪一种是正确的?


Cesium.js 的 HTTP 响应标头:

0 投票
1 回答
128 浏览

animate.css - animate.css 的子资源完整性?

谷歌没有提出任何关于该主题的信息,并且有一些与 Stackoverflow 上的子资源完整性相关的问题,但我的问题是:您如何为 CDN 生成此加密哈希<link>?就我而言,它是 animate.css,但我想这可以应用于任何自定义 CSS 文件。

干杯

0 投票
1 回答
569 浏览

c# - SRI 哈希不是预期的

我试图在我们的构建过程中实现子资源完整性,所以我自己为我们的 javascript 文件生成哈希键。在我们的大多数文件中,我生成的哈希值与浏览器的期望值和 srihash.org 输出的值相匹配。但是,对于 jquery 和 jquery-ui,我生成的哈希值与浏览器预期的哈希值不同,并且 srihash.org 正在输出。这是我的哈希码:

其中“文本”是文件的内容。我认为这是某种编码问题,但我尝试了编码中的每个选项,但没有一个匹配。我尝试从文件系统中读取文件并使用 WebClient.DownloadString 从服务器获取它,并且每次都得到相同的(不正确的)哈希。

0 投票
3 回答
9629 浏览

google-maps - //maps.google.com/maps/api/js 的子资源完整性值

我在哪里可以找到脚本 //maps.google.com/maps/api/js 的子资源完整性值?

例如:

0 投票
0 回答
431 浏览

wordpress - Wordpress 中的子资源完整性保护

在https://observatory.mozilla.org/上扫描我的网站时出现子资源完整性错误

我尝试使用 wp-sri 插件,但它与其他插件冲突,有没有其他方法可以修复它。

错误测试成绩截图:

在此处输入图像描述

0 投票
3 回答
1573 浏览

javascript - 处理子资源完整性检查中的加载错误

我正在实施子资源完整性检查。我想实现一个回退,以便 1)浏览器从我的 CDN 加载,执行完整性检查并继续或 2)在完整性检查失败的情况下,嵌入式脚本启动并从我的应用程序中检索所需的脚本服务器(我控制的资源)。

我有一个简单的 javascript 可以捕获 window.onerror 事件,但该脚本实际上检测到未捕获的 ReferenceError(我的页面引用了外部资源中的脚本),而不是浏览器错误“无法找到有效的摘要...”。

有没有人找到检测完整性检查失败的方法,然后使用 javascript 从更受信任的位置拉取第三方托管资源?