📜  子资源完整性验证或 SRi (1)

📅  最后修改于: 2023-12-03 15:39:01.479000             🧑  作者: Mango

子资源完整性验证或 SRi

什么是子资源完整性验证?

子资源完整性验证(Subresource Integrity,简称SRI)是一种Web安全机制,可以防止资源(如JavaScript、CSS文件)被第三方篡改。SRI通过对资源进行哈希处理,生成哈希值,并与网页中引用该资源的标签(如<script><link>标签)进行匹配,从而验证资源的完整性。

SRI的优点

SRI可以有效防止以下攻击:

  1. DNS劫持:攻击者通过劫持DNS服务器,将用户请求某个资源的域名映射到攻击者的服务器,从而向用户返回被篡改的资源。通过SRI,网页可以验证所请求资源的哈希值,从而发现可能的篡改。

  2. 中间人攻击:攻击者可以在用户请求资源和服务器返回资源之间的通信过程中,拦截并篡改资源。通过SRI,网页可以验证请求到的资源是否为服务器所返回的原始资源。

如何使用SRI

使用SRI的步骤如下:

  1. 通过subresource-integrity属性为资源的标签添加哈希值。例如:
<script src="example.js" integrity="sha384-YGGR8I44GcBxQICTjU+3mUxFeF8MlYqX/dV4bc0GfZ803tB+Hx5iHzG52sCoiXyT"></script>
  1. 生成资源的哈希值。可以使用在线工具(如srihash.org),也可以使用命令行工具(如shasum)。

  2. 在网页中引用资源,并验证其哈希值是否匹配。如果匹配,则可以信任该资源;如果不匹配,则应该警惕可能的篡改。

SRI的注意事项

在使用SRI时,需要注意以下几点:

  1. SRI仅对通过HTTPS协议传输的资源有效。

  2. SRI需要较新的浏览器支持,不支持IE浏览器。

  3. SRI不适用于动态生成的资源(如通过AJAX请求返回的资源)。

结论

子资源完整性验证是一种重要的Web安全机制,可以有效防止资源被篡改。通过为资源的标签添加哈希值,网页可以验证资源的完整性,并信任安全的资源。