我托管了一个网站,允许用户下载存储在内容分发网络 (CDN) 上的文件。从我的站点到 CDN 上文件的链接类似于<a href=https://cdndomain.com/path/to/file>
. 我想为我的用户提供一种方法来确保该文件未被 CDN 操纵。
当然,我可以在我的网站上发布文件的哈希(当然,它是由 SSL/TLS 保护的)。然后,在用户下载文件后,他们可以获取文件的哈希值并验证它是否与我网站上发布的哈希值匹配。这并不少见。但是,我的许多用户不够精明,无法理解这个过程。而且,即使对于那些人来说,这个过程也有些麻烦。我正在寻找一种更自动化/更方便的方法来确保该文件未被操纵。
我知道Chrome、Firefox 和 Safari 现在支持内容安全策略(CSP) 和子资源完整性(SRI)。使用 CSP/SRI,网站可以确保 .js 文件、.css 文件等在其他地方托管并由<script>
or标记引用,方法是使用属性在or标记<link>
中包含目标文件的哈希,例如:<script>
<link>
integrity
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
或者
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
这非常方便,因为浏览器会检查目标文件的哈希值是否与integrity
“幕后”属性中指定的哈希值相匹配,而无需任何用户干预。从 CDN 下载文件后,浏览器获取文件的哈希值并检查该哈希值是否与或标记integrity
属性中提供的哈希值匹配。如果哈希不匹配,浏览器会警告用户并且不执行脚本或应用 css 样式表。 <script>
<link>
我正在为<a>
标签中引用的资源寻找类似的东西——我可以在标签中指定目标资源的哈希值<a>
,并且浏览器会在从 CDN 下载资源后、但在使其可用之前执行类似的检查给用户,并在哈希值不匹配时警告用户。但是根据上面引用的 MDN 文档,CSP 和 SRI 仅适用于<script>
标签和<link>
标签,不适用于<a>
标签。
有谁知道解决方案?