子资源完整性
即是:Subresource Integrity
。这是一个比较简单,但是很有用的安全性内容。
如果你的脚本和样式文件存放在cdn,SRI
就可以帮你验证文件的完整性,防止被篡改。它的使用也很简单,就是先使用sha256|sha384|sha512
这三种hash算法中的一种,对文件内容进行hash运算,然后对hash值进行base64编码,并把编码过后的值写入到script
或link
文件的integrity
属性上。
使用 base64 编码 sha384 算法计算出摘要后的 integrity 值的例子:1
sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
浏览器从cdn加载到指定的脚本或样式文件时,将会对它们使用同样的hash算法和base64编码计算一个hash值,最后与script
或link
上的integrity
属性进行比对,两个hash一致,就说明资源没有被篡改。
在CSP
中有一个指令:require-sri-for
1
2
3Content-Security-Policy: require-sri-for script;
Content-Security-Policy: require-sri-for style;
Content-Security-Policy: require-sri-for script style;
这个指令可以提供对脚本或样式文件的SRI
限制,只有满足了SRI
,脚本或样式才允许被加载。
在vue-cli4
里面,也有一个integrity
的option
,可以在构建的时候自动给script
或link
注入SRI
必要的hash值。