什么是子资源完整性 (SRI)?
SRI 是一种新型 W3C 规范, 让开发人员确保托管在第三方服务器上的资源不会被篡改.
当从第三方来源加载库时,如
BootCDN、StaticFile 和 ZStatic.net, 建议使用 SRI 作为最佳实践.
在 MDN 上了解如何使用
SRI.
子资源完整性 (SRI) 和 HTTPS 的区别?
TLS 确保浏览器和服务器之间的连接是安全的, 但攻击者仍可能在服务器端修改资源本身以包含恶意内容,即便 TLS 证书有效. 另一方面,SRI 保证资源自 Web
作者散列后没有被更改.
如何生成 SRI Hash 值?
使用我们的在线生成器或以下 shell 命令:
openssl dgst -sha384 -binary FILENAME.js | openssl base64 -A
为什么需要 crossorigin="anonymous"
?
当请求并非同一来源时, crossorigin
属性必须存在以检查文件的完整性.
如果没有 crossorigin
属性, 浏览器将选择 "fail open",
意味着它将像未设置完整性属性一样加载资源, 从而失去了 SRI
带来的所有安全性.
crossorigin="anonymous"
不会将信息发送至第三方服务器. 但是, 它会发送 Origin
HTTP 响应头. 如果服务器拒绝包含资源 (通过不设置 Access-Control-Allow-Origin
响应头),
则该资源不会被浏览器使用.
你可以在 MDN 上了解更多.