无法在已部署的 emberjs 应用程序上的资源的“完整性”属性中找到有效的摘要

Kay*_*Kay 8 javascript haproxy ember.js ember-cli kubernetes

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

无法在资源 'http://staging.org.com/assets/vendor-0ada2c9fb4d3e07ad2f0c6a990945270.js' 的 'integrity' 属性中找到有效的摘要,计算出的 SHA-256 完整性为 'Sb4Xc/Oub27QW0MKlq.Mg7mg7s' 资源被屏蔽了

当我检查文件时,我可以看到有问题的两个 .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>
Run Code Online (Sandbox Code Playgroud)

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

有什么值得注意的;

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

该问题仅发生在我部署的登台环境中。

Ogg*_*las 8

我在部署 Blazor WebAssembly 应用程序时收到此错误。

无法在资源的“完整性”属性中找到有效的摘要

然后它显示了几个 NuGet。手动删除解决方案中的所有binobj文件夹,然后重新部署。此后一切正常。

https://github.com/dotnet/aspnetcore/issues/28692#issuecomment-783333400

  • 如果您投反对票,请说明原因。否则很难改进答案。 (3认同)
  • 这解决了我的问题。应标记为答案。 (2认同)

jel*_*han 4

Ember默认使用子资源完整性 (SRI)来提高使用该框架构建的应用程序的安全性。

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

子资源完整性 (SRI) 是一项安全功能,使浏览器能够验证它们获取的资源(例如,从 CDN)是否在没有意外操作的情况下交付。它的工作原理是允许您提供所获取的资源必须匹配的加密哈希。

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

ember-cli-sri 的文档提供了 Ember 构建管道的集成,警告了这一点:

在使用 SRI 的代码中,您不得篡改构建的输出 JavaScript 文件,因为代码将无法加载。