我正在实施子资源完整性检查。我想实现一个回退,例如:1)浏览器从我的CDN加载,执行完整性检查并继续执行或2)如果完整性检查失败,嵌入式脚本将启动并从我的应用程序中检索所需的脚本服务器(我控制下的资源)。
我有一个简单的javascript来捕获window.onerror事件,但是脚本实际上是检测到未被捕获的ReferenceError(我的页面引用了外部资源中的脚本),而不是浏览器错误“找不到有效的摘要.. 。“
有没有人找到检测完整性检查失败的方法,然后使用javascript从更受信任的位置提取第三方托管资源?
答案 0 :(得分:2)
看一下SRI-fallback的实现:
答案 1 :(得分:2)
您可以检查加载的资源是否存在并加载后备本地副本:
<script src="https://code.jquery.com/jquery-1.12.0.min.js" integrity="sha256-Xxq2X+KtazgaGuA2cWR1v3jJsuMJUozyIXDB3e793L8=" crossorigin="anonymous"></script>
<script>
if (!window.jQuery) {
var script = document.createElement('script');
script.src = '/local-resources/js/jquery-1.12.0.min.js';
script.async = false;
document.head.appendChild(script);
}
</script>
答案 2 :(得分:0)
您必须抓住错误并做任何必要的事情。
看下面的两个例子。借用任何有用的东西。向作者致以谢谢 ;;-)
在这里您可以找到示例https://github.com/cyph/sri-fallback/blob/master/sri-fallback.js
https://aldaris.github.io/dev/security/2018/03/05/subresource-integrity.html
还有另一本很好的读物。PS:window.onerror可能不是最好的方法,因为您最终可能遇到比预期更多的错误,并陷入很多情况下...