【问题标题】:Failed to find a valid digest in the 'integrity' attribute for resource on a deployed emberjs application未能在已部署的 emberjs 应用程序上的资源的“完整性”属性中找到有效的摘要
【发布时间】:2020-10-15 16:21:14
【问题描述】:

我有一个已部署的 emberjs 应用程序,并且在 google chrome 浏览器中我收到以下 2 个 .js 文件的错误。

未能在“完整性”属性中找到有效的摘要 资源 'http://staging.org.com/assets/vendor-0ada2c9fb4d3e07ad2f0c6a990945270.js' 具有计算的 SHA-256 完整性 'Sb4Xc/Oub27QW0MKlqK0sbq0Mm476jU7MgJaCzd/gKk='。该资源已 被屏蔽了

当我检查文件时,我可以看到两个有问题的 .js 文件的脚本标签。我不是 100% 确定这种完整性检查是如何工作的。您可以在下面看到带有 sha 的完整性属性。

<script src="/assets/vendor-0ada2c9fb4d3e07ad2f0c6a990945270.js" integrity="sha256-s3XY9h9v9IThygF6UkWRvWZsf7zeTqYJ1rLfDgg1bS0= sha512-k3lfqdeZw3OcsECfD3t99Hidh6IoRlFSoIu5nJk0FkLYHwx0q/rddirj4jh4J73dmLwKfG9mx0U5Zf6ZzRBsvA==" ></script>
<script src="/assets/g-web-56670cf0485cf52f54589091e2a25cc8.js" integrity="sha256-jNmWqO61OPijscQ5cHVSbB1Ms5wKX78ZACYdhrUo3X4= sha512-oiksgRFsqgHaCvXPvd3SAsUuX4zPeVClQBIgrOgIKNBMa3hPqCHknoFqDGRtSyfN4EdIkfk/x1zSqBqRvONAGQ==" ></script>

emberjs 应用程序是使用 docker 映像构建的,部署到 kubernetes,运行 haproxy 的 aws elb 正在处理此应用程序的路由,因此当我导航到 staging.x.com 时,它会路由到此服务的 kubernetes 中的内部 dns( emberjs 网络应用程序)。

有什么有趣的注意事项;

  1. 在本地运行 ember serve 可以正常工作,并且应用程序加载正常。
  2. 在本地构建和运行 docker 映像可以正常工作,并且应用程序加载正常。

该问题仅发生在我部署的暂存环境中。

【问题讨论】:

  • 我在部署到我们的测试环境中的 Blazor 应用程序时遇到了同样的问题。如果你解决了这个问题,请告诉我。谢谢!
  • @AndrewBorst 我解决了,它与 haproxy 设置有关。我在 haproxy 中删除了一些不必要的东西,这些东西恰好与静态 contnet 的服务冲突,导致完整性失败。
  • 其他人对此感到痛苦:确保字符编码是您期望它在前端出现的。我知道,如果没有指定 CE,至少像 Azure 这样的 MS 产品喜欢应用自己的产品,即使默认情况下 JS 可能应该是 UTF-8。

标签: javascript kubernetes ember.js ember-cli haproxy


【解决方案1】:

正如 Jelhan 在上面所说的“SRI”策略,要解决此问题,您只需删除 integrity 属性。然后浏览器不会检查你从 CDN 获取的资源

【讨论】:

【解决方案2】:

Ember 默认使用Subresource Integrity (SRI) 来提高使用该框架构建的应用程序的安全性。

Mozilla 开发网络对 SRI 有很好的解释:

子资源完整性 (SRI) 是一种安全功能,可启用 浏览器验证它们获取的资源(例如,从 CDN) 交付时没有意外操作。它的工作原理是允许 您提供获取的资源必须的加密哈希 匹配。

此处描述的哈希值在 Ember 应用程序构建时生成并注入到 index.html 中。如果堆栈的任何部分(部署、Web 服务器、代理等)修改了文件,index.html 中的哈希将不再匹配所服务文件的哈希。因此,浏览器将阻止该资产的执行并抛出您在问题中提到的错误。

在 Ember 构建管道中提供集成的 documentation of ember-cli-sri 会发出警告:

在使用 SRI 的代码中,您不得篡改生成的输出 JavaScript 文件,因为代码不会加载。

【讨论】:

  • 帮助我解决了一个问题,我在 Web 服务器上手动编辑了一个破坏 PWA 应用程序的 html 文件。浏览器阻止页面获取资源,因为页面哈希无效。 +1
猜你喜欢
  • 2021-10-19
  • 2021-12-23
  • 2019-04-13
  • 1970-01-01
  • 2021-05-09
  • 2021-03-07
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多