8

我最近发现了以下漂亮的小站点,用于为外部加载的资源生成子资源完整性 (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>
4

1 回答 1

20
于 2018-08-30T17:33:16.653 回答