美文网首页
script crossorigin和integrity 属性

script crossorigin和integrity 属性

作者: 菜蚴菜 | 来源:发表于2022-09-08 10:19 被阅读0次
1、script标签 crossorigin 属性

script标签去请求资源的时候,request是没有origin头的。
script标签请求跨域资源的时候,内部运行如果报错的话,window.onerror 捕获的时候,内部的error.message只能看到Script error.看不到完整的错误内容。这个应该是浏览器的安全策略。

window.addEventListener('error', function(msg, url, lineno, colno, error) {
    console.log('error catch:', msg.message);
    return false
})

设置 crossorigin属性后
①、script标签去请求资源的时候,request会带上origin头,然后会要求服务器进行 cors校验,跨域的时候如果response header 没有 ‘Access-Control-Allow-Origin’ 是不会拿到资源的。cors验证通过后,拿到的script运行内部报错的话,window.onerror 捕获的时候,内部的error.message可以看到完整的错误信息。
crossorigin的属性值分为 anonymous和use-credentials。如果设置了crossorigin属性,但是属性值不正确的话,默认是anonymous。
②、anonymous代表同域会带上cookie,跨域则不带上cookie,相当于 fecth请求的credentials: 'same-origin'。
③、use-credentials跨域也会带上cookie,相当于fetch请求的 credentials: 'include',这种情况下跨域的response header 需要设置'Access-Control-Allow-Credentials' = true,否则cors失败。

2、integrity安全验证

引入远程文件存在一个问题,如果对应的文件被篡改了,那么可能会对用户造成影响。虽然cdn一般都是可靠的,但是不排除受到黑客的攻击。
integrity属性设置引入js文件的hash值,浏览器在下载js文件时候,会对js文件进行hash计算,如果一致则正常加载,否则拒绝加载运行。
生成hash值的工具地址

    integrity="sha384-*****"
    src="https://cdn.xxx.xx/js/index.js"></script>
总结

①、设置了crossorigin就相当于开启了cors校验。
②、开启cors校验之后,跨域的script资源在运行出错的时候,window.onerror可以捕获到完整的错误信息。
③、crossorigin=use-credentials可以跨域带上cookie。
④、integrity可以做远程文件安全验证

参考文章

https://juejin.cn/post/6969825311361859598

相关文章

网友评论

      本文标题:script crossorigin和integrity 属性

      本文链接:https://www.haomeiwen.com/subject/yqtonrtx.html