在子资源完整性检查中处理加载错误
Handling load error within subresource integrity check
我正在实施子资源完整性检查。我想实施回退,以便 1) 浏览器从我的 CDN 加载,执行完整性检查并继续或 2) 在完整性检查失败的情况下,嵌入式脚本启动并从我的应用程序中检索所需的脚本服务器(我控制的资源)。
我有一个简单的 javascript 可以捕获 window.onerror 事件,但脚本实际上检测到未捕获的 ReferenceError(我的页面引用了外部资源中的脚本),而不是浏览器错误 "Failed to find a valid digest...".
有没有人找到检测完整性检查失败的方法,然后使用javascript从更受信任的位置拉取第三方托管资源?
看看这个 SRI-fallback 的实现:
您可以检查加载的资源是否存在并加载后备本地副本:
<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>
你必须捕获错误并做任何必要的事情。
- 创建并附加 MutationObserver
- 添加回调
- 捕获错误并采取相应措施
查看下面的两个示例。借什么有用的。向作者致以大大的感谢 ;-)
在这里你可以找到一个例子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 可能不是最好的方法,您可能最终会遇到比预期更多的错误并陷入许多情况...
我正在实施子资源完整性检查。我想实施回退,以便 1) 浏览器从我的 CDN 加载,执行完整性检查并继续或 2) 在完整性检查失败的情况下,嵌入式脚本启动并从我的应用程序中检索所需的脚本服务器(我控制的资源)。
我有一个简单的 javascript 可以捕获 window.onerror 事件,但脚本实际上检测到未捕获的 ReferenceError(我的页面引用了外部资源中的脚本),而不是浏览器错误 "Failed to find a valid digest...".
有没有人找到检测完整性检查失败的方法,然后使用javascript从更受信任的位置拉取第三方托管资源?
看看这个 SRI-fallback 的实现:
您可以检查加载的资源是否存在并加载后备本地副本:
<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>
你必须捕获错误并做任何必要的事情。
- 创建并附加 MutationObserver
- 添加回调
- 捕获错误并采取相应措施
查看下面的两个示例。借什么有用的。向作者致以大大的感谢 ;-)
在这里你可以找到一个例子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 可能不是最好的方法,您可能最终会遇到比预期更多的错误并陷入许多情况...