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

渗透技巧 3个月前 admin
140 0 0
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子资源完整性)详解

版权声明:admin 发表于 2024年8月9日 上午10:31。
转载请注明:Web安全之SRI(Subresource Integrity子资源完整性)详解 | CTF导航

相关文章