Fetch API 教程 目录

Fetch request.integrity 属性

request.integrity 属性用于获取或设置请求的子资源完整性(Subresource Integrity,SRI)哈希。SRI 是一种安全机制,用于验证从服务器加载的资源是否被篡改过。

概述

SRI 通过为每个外部资源提供一个哈希值来确保资源的完整性和可信度。当浏览器尝试加载一个资源时,它会计算该资源的实际哈希值,并将其与 integrity 属性中提供的哈希值进行比较。如果两者匹配,则表明资源未被篡改;如果不匹配,则会阻止资源加载。

使用场景

SRI 主要用于以下几种场景:

  • 加载第三方库和脚本,防止这些脚本被恶意篡改。
  • 确保本地资源(如 CSS 文件、图片等)未被篡改。
  • 在 CDN 上加载资源时,确保资源的完整性。

示例代码

设置 request.integrity 属性

获取 request.integrity 属性

详细说明

什么是 SRI?

SRI 是一种安全机制,允许用户确保从服务器加载的资源未被篡改。通过在 <script><link> 标签中添加 integrity 属性,可以指定资源的哈希值。当浏览器加载资源时,它会自动计算资源的实际哈希值,并将其与 integrity 属性中的哈希值进行比较。如果两者不一致,浏览器将拒绝加载该资源。

如何生成哈希值?

要使用 SRI,首先需要为资源生成哈希值。可以使用命令行工具如 OpenSSL 来生成哈希值。例如,对于一个 JavaScript 文件,可以使用以下命令生成 SHA-256 哈希值:

这将输出一个哈希值,你可以将其添加到 HTML 文件中的 integrity 属性中。

支持的哈希算法

目前支持的哈希算法有:

  • SHA-256
  • SHA-384
  • SHA-512

这些算法的前缀分别是 sha256-sha384-sha512-。例如,SHA-256 的哈希值应该以 sha256- 开头。

注意事项

  • 使用 SRI 时,必须确保哈希值正确无误,否则可能会导致资源无法加载。
  • SRI 仅适用于 HTTPS 请求。对于 HTTP 请求,浏览器不会检查哈希值。
  • 如果服务器返回的内容类型与预期不符(例如,文本文件被当作二进制文件处理),可能会导致哈希值不匹配。

实践建议

  • 在生产环境中始终启用 SRI,以确保加载的资源未被篡改。
  • 定期更新哈希值,以应对资源内容的变更。
  • 对于动态生成的资源,可以考虑使用服务器端签名来生成哈希值。

总结

request.integrity 属性是 Fetch API 中的一个重要功能,它使开发者能够利用 SRI 来提高应用的安全性。通过正确配置和使用 integrity 属性,可以有效防止资源被篡改,从而提升应用的整体安全性。


上一篇:Fetch request.headers 属性
下一篇:Fetch request.isHistoryNavigation 属性
纠错
反馈