【问题标题】:Handling load error within subresource integrity check处理子资源完整性检查中的加载错误
【发布时间】:2017-03-17 11:00:51
【问题描述】:

我正在实施子资源完整性检查。我想实现一个回退,这样 1) 浏览器从我的 CDN 加载,执行完整性检查并继续或 2) 在完整性检查失败的情况下,嵌入式脚本启动并从我的应用程序中检索所需的脚本服务器(我控制的资源)。

我有一个简单的 javascript 可以捕获 window.onerror 事件,但该脚本实际上检测到未捕获的 ReferenceError(我的页面引用了外部资源中的脚本),而不是浏览器错误“未能找到有效的摘要.. 。”。

有没有人找到检测完整性检查失败的方法,然后使用 javascript 从更受信任的位置拉取第三方托管资源?

【问题讨论】:

    标签: javascript subresource-integrity


    【解决方案1】:

    看看这个 SRI-fallback 的实现:

    https://github.com/cyph/sri-fallback

    【讨论】:

      【解决方案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>
      

      【讨论】:

        【解决方案3】:

        你必须抓住错误并做任何必要的事情。

        • 创建并附加一个 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 可能不是最好的方法,你可能最终会遇到比预期更多的错误并陷入许多情况......

        【讨论】:

          猜你喜欢
          • 2016-11-02
          • 1970-01-01
          • 1970-01-01
          • 2016-07-05
          • 1970-01-01
          • 1970-01-01
          • 2017-12-22
          • 2018-12-06
          • 2013-02-09
          相关资源
          最近更新 更多