返回
从根源把控,杜绝网站 JS 篡改!
前端
2023-12-02 08:57:16
JS 篡改的隐患
网站上的 JS 脚本通常是从 CDN 服务加载的。然而,CDN 服务器并非万无一失,存在遭受攻击的风险。如果 CDN 服务器被攻破,攻击者可以篡改 JS 文件,植入恶意代码。当用户访问网站时,就会执行被篡改的 JS 脚本,从而造成严重的安全威胁。
杜绝 JS 篡改的利器:Subresource Integrity
为了防止 JS 篡改,我们可以使用 Subresource Integrity (SRI) 机制。SRI 是一个由 W3C 制定的规范,它允许网站验证从外部来源加载的脚本的完整性。
SRI 的工作原理如下:
- 网站在 HTML 页面中引入要加载的外部脚本,并指定其完整性哈希值。
- 浏览器在加载脚本时,会先验证脚本的完整性哈希值是否与预期的哈希值一致。
- 如果完整性哈希值不一致,浏览器将阻止脚本执行,并显示错误消息。
实现 SRI 的步骤
在 HTML 页面中引入外部脚本时,需要添加 integrity
和 crossorigin
属性,如下所示:
<script src="https://cdn.example.com/script.js" integrity="sha256-1234567890abcdef" crossorigin="anonymous"></script>
其中:
integrity
属性指定脚本的完整性哈希值。crossorigin
属性指定脚本跨域加载时所需的 CORS 策略。
计算完整性哈希值
完整性哈希值可以通过以下步骤计算:
-
使用以下命令生成脚本文件的 SHA256 哈希值:
shasum -a 256 script.js
-
将生成的哈希值(十六进制字符串)放入
integrity
属性中。
实践案例
以下是一个使用 SRI 防止 JS 篡改的实际案例:
一个网站从 CDN 服务加载 jQuery 库。为了防止 CDN 劫持,该网站在 HTML 页面中使用 SRI 如下:
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js" integrity="sha256-j0o/j5nMF1pqifTkYeRKCWj7gae+t3uztXnoSopW1/E=" crossorigin="anonymous"></script>
通过使用 SRI,该网站可以确保加载的 jQuery 库是完整的、未被篡改的。如果 CDN 服务器被攻击,攻击者无法篡改 jQuery 库文件,因为浏览器会验证完整性哈希值并阻止执行被篡改的脚本。
总结
JS 篡改是一个严重的网站安全威胁。通过使用 Subresource Integrity (SRI) 机制,我们可以从根源上把控网站 JS 的执行,杜绝 CDN 劫持导致的 JS 篡改,确保网站内容的完整性。SRI 的实现非常简单,强烈建议所有网站使用 SRI 来保护自己的网站免受 JS 篡改的危害。