GitHub 宣布启用 SRI 策略,用来减少由「托管在 CDN 的资源被篡改」而引入的 XSS 等风险。很多小伙伴对此表示关注。那么 SRI 究竟是什么,如何使用 SRI,它的适用场景和局限性是什么?本文逐一解答。
SRI 是什么?
SRI 是 Subresource Integrity 的缩写,一般按照字面意义翻译为:子资源完整性(草案),它也是由 Web 应用安全工作组(Web Application Security Working Group)发布。草案地址见这里。
Web 性能优化中很重要的一点是让请求提前结束,让可缓存的资源走 CDN 是最通用的做法。CDN 服务提供商通过分布在各地的节点,让用户从最近的节点加载内容,大幅提升速度。但是 CDN 的安全性一直是一个风险点:对于网站主来说,让请求从第三方服务器经过,由第三方响应,安全方面肯定不如自己服务器可控。
我们知道 CSP(Content Security Policy) 的外链白名单机制可以在现代浏览器下减小 XSS 风险。但针对 CDN 内容被篡改而导致的 XSS,CSP 并不能防范,因为网站所使用的 CDN 域名,肯定在 CSP 白名单之中。这时候,SRI 就应运而生了。它通过对资源进行摘要签名机制,来保证外链资源的完整性(不被篡改)。
目前支持 SRI 的浏览器有 Chrome 45+ 和 FireFox 43+。IE Edge 表示考虑中,将其列入了需求池,接受用户投票。CanIUse 网站目前尚未提供 SRI 支持度数据,但是已经有人提了 Issue,后续应该会加上。 查看全文