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

Posted

技术标签:

【中文标题】未能在已部署的 emberjs 应用程序上的资源的“完整性”属性中找到有效的摘要【英文标题】:Failed to find a valid digest in the 'integrity' attribute for resource on a deployed emberjs application 【发布时间】: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 网络应用程序)。

有什么有趣的注意事项;

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

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

【问题讨论】:

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

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

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review【参考方案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

以上是关于未能在已部署的 emberjs 应用程序上的资源的“完整性”属性中找到有效的摘要的主要内容,如果未能解决你的问题,请参考以下文章

Android:在已部署的应用程序中找不到资源异常

在已部署的应用程序上播放来自 s3 的文件时的跨源资源策略问题

在已部署的 Flask 应用程序 (Heroku) 上使用 OpenCV

ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境

如何在已部署的 Heroku 应用上查看文件和文件结构

EmberJS:无需转换到新 URL 即可显示编辑/创建表单?