Web安全之SRI(Subresource Integrity子资源完整性)详解

admin 2024年8月9日14:46:55评论127 views字数 2669阅读8分53秒阅读模式
Web安全之SRI(Subresource Integrity子资源完整性)详解

Web安全之

SRI详解

Web安全之SRI(Subresource Integrity子资源完整性)详解

在现代Web开发中,前端性能和用户体验是至关重要的。为了提高加载速度和减少服务器负载,开发者通常会使用外部资源,如第三方库和CDN(内容分发网络)提供的脚本和样式文件。然而,这些外部资源也可能带来安全风险,例如资源被恶意篡改,导致用户加载并执行恶意代码。为了解决这一问题,Subresource Integrity(子资源完整性,简称 SRI)应运而生。本文将详细介绍SRI的概念、原理及其在Web安全中的应用。

SRI概念

Subresource Integrity(SRI)是一种安全特性,它允许Web开发者通过为外部资源(如JavaScript和CSS文件)提供哈希值,确保资源的完整性。当浏览器加载外部资源时,会根据提供的哈希值验证资源的完整性。如果资源的哈希值与指定值不匹配,浏览器会拒绝加载该资源,从而防止加载被篡改的内容。

SRI原理

      SRI的工作原理非常简单:在HTML文件中引用外部资源时,开发者在<script>或<link>标签中加入integrity属性和crossorigin属性。integrity属性包含资源的哈希值,而crossorigin属性指示浏览器如何处理跨域资源请求。

      以下是一个使用SRI的示例:

html复制代码<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>SRI Example</title>    <link rel="stylesheet" href="https://example.com/styles.css" integrity="sha384-abc123..." crossorigin="anonymous"></head><body>    <script src="https://example.com/script.js" integrity="sha384-def456..." crossorigin="anonymous"></script></body></html>

      在上述示例中,integrity属性包含了使用SHA-384算法计算的资源哈希值。当浏览器加载这些资源时,会计算实际加载资源的哈希值并与integrity属性中提供的哈希值进行比较。如果两者不匹配,浏览器将拒绝加载该资源。

SRI的生成与使用

要使用SRI,首先需要计算资源的哈希值。通常使用SHA-256、SHA-384或SHA-512算法来生成哈希值。可以使用命令行工具、在线工具或代码库来计算这些哈希值。以下是使用Node.js和crypto模块计算哈希值的示例:

const crypto = require('crypto');const fs = require('fs');const filePath = 'path/to/resource.js';const fileBuffer = fs.readFileSync(filePath);const hashSum = crypto.createHash('sha384');hashSum.update(fileBuffer);const hex = hashSum.digest('base64');console.log(`sha384-${hex}`);

生成哈希值后,将其添加到HTML文件的integrity属性中。需要注意的是,每次资源更新后都需要重新计算并更新哈希值。

SRI的优势与局限性

1

优势

1. 提高安全性:SRI确保外部资源未被篡改,有效防止中间人攻击和内容投毒。

2. 简单易用:只需添加integrity和crossorigin属性即可实现。

3. 兼容性好:大多数现代浏览器均支持SRI。

2

局限性

1. 更新维护复杂:使用 SRI 需要为每个外部资源计算并嵌入其哈希值。一旦资源更新,哈希值也必须更新,否则页面会因为哈希值不匹配而无法加载资源。这增加了维护的复杂性和工作量。

2. 不支持动态内容:对于动态生成的资源,SRI不适用。某些情况下,网站需要动态加载资源或使用不同版本的资源,这与 SRI 固定哈希值的机制冲突,可能导致兼容性问题,限制了动态内容的使用。

3. 依赖浏览器支持:只有支持 SRI 的浏览器才能发挥其作用。虽然现代浏览器普遍支持 SRI,但仍有部分老旧浏览器无法利用这一安全特性,导致保护范围受限。

SRI与CSP的结合

Content Security Policy(内容安全策略,简称 CSP)是一种Web安全策略,允许开发者控制资源加载策略。SRI与CSP结合使用,可以进一步提高安全性。例如,可以通过CSP策略强制执行SRI:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://example.com; object-src 'none';">

通过这种方式,即使开发者忘记添加SRI,CSP策略也能防止加载不安全的资源。

总结

Subresource Integrity(SRI)是现代Web开发中保护外部资源安全的重要手段。通过为外部资源提供哈希值,SRI可以有效防止资源被篡改,提高Web应用的安全性。尽管SRI在维护和动态内容方面存在一定局限性,但结合其他安全策略(如CSP),可以提供更全面的安全保障。在实际开发中,合理使用SRI是确保Web应用安全的一项重要措施。

往期精彩合集

● 联想GIC全球安全实验室受邀参加行业研讨会,分享红蓝对抗思想在产品安全中的应用

● 联想全球安全实验室受邀参加2024年AIGC数据应用大会,共谋数据合规与网络安全应对策略

● CVSS漏洞评分标准的前世今生

● 基于LLM的被动扫描工具:burpGpt

● RAG QA 系统的检索和生成调优

● 2024世界智能产业博览会开幕,联想全球安全实验室浅谈从传统PC安全到AIPC安全的进化过程

● AI时代沟通的艺术:如何撰写优质Prompt

● 用魔法打败魔法——大模型助力钓鱼邮件辨识

● 招贤纳士,内推有礼!联想集团急聘产品安全高级经理

● 浅析操作系统中敏感数据处理与密钥管理

联想GIC全球安全实验室(中国)

[email protected]

Web安全之SRI(Subresource Integrity子资源完整性)详解

原文始发于微信公众号(联想全球安全实验室):Web安全之SRI(Subresource Integrity子资源完整性)详解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月9日14:46:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Web安全之SRI(Subresource Integrity子资源完整性)详解https://cn-sec.com/archives/3049189.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息