在nodeloc看到一个大佬写的帖子,感觉有用,特此收藏一下,主要是讲网站引用某些外部的js库可能会造成安全风险和加载问题,全文如下。
引用外部js
另外再说说论坛的事。
论坛有一个js文件,看上去很平常。如果看过安全圈的新闻,就会发现这种引用有问题。

首先这个外部js是没有用async=""
或者defer=""
加载的。
这个js又在<head>
区块中,这说明什么问题?
说明是这个js是同步加载的,并且要等这个js加载完才会加载正文<body>
。
JS加载速度问题
当cdn.jsdelivr.net域名连接性不好时,发过去的http包drop掉时,浏览器会一种等待这个js加载完成或者1分钟超时断开连接才加载正文。
会发生什么,用俗话来讲,就是cdn.jsdelivr.net加载的时候会白屏(因为body没加载)(不过tcp reset由于会迅速断开,反而不受影响)
还有,这种方式
<script src=“https://example.com/example-framework.js"></script>
直接引用一个外部js而不进行任何校验是十分危险的,而且还是这种任何人都有编辑权限的仓库,github,npm等等
即使现在指向官方,也不能保证未来官方仓库改名,删库后(然后被建了同名仓库顶替),或者被篡改(源仓库被黑,或者中间cdn被劫持等等)等等。
这个圈内有很多利用的例子,连xss都省了,直接钓走登录cookie。
正确引用外部JS方法
正确做法减少外部js引用,如果必须要引用,必须校验js的hash(如sha256等等)。
<script src=“https://example.com/example-framework.js” integrity=“sha256-Kap7fdgcCY5u+R9GqQ8K/uxy9rx7GYl1kPzQho1wx4Jw” crossorigin=“anonymous”></script>
我了解这个integrity是看到一个新闻,好像是某交易所网站引用外部js未校验的事情,结果上游js被篡改,导致用户币被盗走了。