问题标签 [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.
javascript - 是否可以将 SRI 用于 recurly.js cdn?
recurly.js可以与 SRI 一起使用吗integrity
?
我注意到这个问题,它关闭了完整性哈希包含在发行说明中,它们是. 然而,当我尝试在 codepen 上对此进行测试时:
我在 javascript 控制台中收到此错误:
子资源完整性:资源“ https://js.recurly.com/v3/recurly.js ”具有完整性属性,但该资源要求请求启用 CORS 以检查完整性,但事实并非如此。资源已被阻止,因为无法强制执行完整性。
我是否遗漏了什么或者 Recurly 没有在该端点上启用 CORS?
cdn - 子资源完整性真的有效吗?
我决定将 SRI 添加到我们的 CDN 脚本中,但我想测试它是否有效。如果我手动更改哈希脚本仍然加载。我期待控制台中出现某种错误代码或其他内容。
例如,这是正确的哈希:
如果我然后将每个 sha 哈希中的第一个字符更改为:
我希望它会失败。但事实并非如此。在 Firefox 58.0.2 和 Chrome 64.0.3282.140 中测试,两者都支持 SRI。缓存已关闭,我可以在开发人员工具中看到每次都重新获取脚本。
我还能做些什么来验证是否使用了 SRI?我从根本上误解了什么......?
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 将显示附加行:
browser - Web 浏览器是否以不同的方式缓存具有子资源完整性 (SRI) 的资源?
我认为在资源上指定子资源完整性哈希应该允许 Web 浏览器更积极地缓存,并且基本上总是重用资源的本地副本。
是否在浏览器中实现(或至少“计划实现”)对 SRI 资源的更强缓存?因此,例如点击“[刷新页面]”按钮仍然会使浏览器重用缓存的资源?或者不是吗?如果不是,那是不是因为一些重要的原因?或者只是“还没有,但也许有一天”?
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 而不是以前版本的完整性问题的?
谢谢
html - SRI 的完整性和跨域值是否保存在 package.json 或其他地方?
这是 bootstrap 的官方 CDN 样式表:
然而,在我的标记中,我没有对版本进行硬编码,因为它可能会改变,所以我将它从我的构建系统或应用程序中拉出来。一个虚构的例子:
如您所见$VERSION
,它不是硬编码的。因此,我可以更改在构建过程中使用的版本(在 中package.json
),而不必编辑我的应用程序。
现在我想以integrity
同样的方式添加。我希望我能在 中找到它package.json
,但是对于 bootsrap 来说,它不存在。我也假设其他软件包。
我知道我可以这样计算:
但我不想让我的构建系统过于复杂。
有没有什么地方可以得到这个值,而不必硬编码?我自动从我的项目package.json
(或 in node_modules/bootstrap
)中提取版本,因此我希望为完整性做类似的事情。
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,如果你只提供一个哈希值,你应该使用哪个?我通常会看到网站(例如Bootstrap)在其示例代码中提供 sha384 值。那是因为它在中间,不是太大,也不是太小?
- 出于好奇,该属性是否可以用在和
integrity
旁边的任何标签上。我特别想知道多媒体标签,如,等。<script>
<link>
<img>
<source>
es6-modules - es6 import 或 worker 的子资源完整性
<script>
接受integrity
属性,所以我可以安全地加载一个模块:
但是在脚本中加载模块时如何保证安全呢?
- 带进口:
- 动态导入:
- 甚至网络工作者:
spring - Angular2+对本地脚本文件使用完整性参数
我在 angularjs 的资产文件夹中有 2 个脚本。我使用https://hash.online-convert.com/sha384-generator为他们生成了完整性哈希。在我的本地主机中,一切正常。但是在服务器中只有 IE 可以工作,但是 firefox 和 chrome 告诉 hash 与内容不匹配。以下是如何包含文件的示例:
API 使用 Java Spring 实现,并且还添加了此安全标头:
为什么 firefox 和 chrome 不能使用网络服务器中的完整性哈希正确验证?我错过了什么吗?
jquery - Wordpress jquery 1.12.4的哈希不匹配
我正在使用最新的(4.9.8)WordPress,目前正在为<script>
标签添加完整性属性。的版本/wp-includes/js/jquery/jquery.js
是1.12.4
。用于此的 SRI(哈希)是
sha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=
.
jquery 站点和Cloudflare CDN1.12.4
上的版本具有 SRI
sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=
代码看起来缩小了,但 SRI 也不匹配缩小版本。Cloudflare 和 jquery 站点上的 SRI 属性也与缩小版本相匹配。
- 有谁知道为什么会有差异?
- WordPress 开发人员自定义 jquery(标准)库是否常见?