【问题标题】:Mixed-content warning from Chrome 87 when accessing HTTP image source from an HTTPS page从 HTTPS 页面访问 HTTP 图像源时来自 Chrome 87 的混合内容警告
【发布时间】:2021-02-08 13:48:17
【问题描述】:

我们有一个在公司桌面上运行的内部 (.Net) 应用程序。它运行一个小型 Web 服务器,在 localhost 的特定端口上侦听 HTTP 请求。我们有一个单独的 HTTPS 网站,它通过将隐藏图像的 ImageUrl 设置为 URL 来与该应用程序进行通信 - 这会调用对 localhost 的 HTTP 请求,应用程序会接受并采取行动。例如,网站会将图片的 URL 设置为:

http://127.0.0.1:5000/?command=dostuff

这是为了解决来自网站的任何类型的“混合内容”消息,因为图像似乎不受混合内容规则的约束。有点小技巧,但效果很好。

我看到 Chrome 正在朝着完全阻止页面上的混合内容迈进,果然 Chrome 87(目前在测试版通道上)现在在控制台中显示了这些警告:

混合内容:“https://oursite.company.com/”的页面已加载 通过 HTTPS,但请求了不安全的元素 'http://127.0.0.1:5000/?command=dostuff'。这个请求是 自动升级到 HTTPS,更多信息见 https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html

但是,尽管警告说请求正在自动升级,但它并没有 - 应用程序仍然收到一个普通的 HTTP 请求并继续正常工作。

关于此警告是否为“软失败”以及 Chrome 的未来版本是否会强制自动升级到 HTTPS(这会破坏事情),我找不到任何明确的指导。从长远来看,我们计划更换该应用程序,但我希望在任何会在此之前突然停止该应用程序工作的事情发生之前。

在上述场景中使用 HTTP 到 localhost 来处理图像和其他混合内容是否会成为未来的实际问题?

【问题讨论】:

  • 您的实际问题是什么?
  • @DylanSp:我已经更新了帖子。我想我要问的是:为什么 Chrome 说它正在将 HTTP 请求升级到 HTTPS,而实际上它不是,并且鉴于这似乎是一个“软警告”,这是否会开始成为我们在未来?
  • Chrome 是该环境中唯一使用的浏览器吗?
  • @Binarus:是的,这是我们为企业用户提供的唯一支持
  • 您对问题的可能解决方案而不是您的问题的答案感到满意吗?

标签: google-chrome mixed-content


【解决方案1】:

这个答案将集中在您的主要问题上:使用 HTTP 到 localhost 来处理上述场景中使用的图像和其他混合内容,将来会成为一个实际问题吗?

答案是是的

blog post you linked to 说:

更新(2020 年 4 月 6 日):混合图像自动升级最初计划用于 Chrome 81,但将至少延迟到 Chrome 84。请查看Chrome Platform Status entry 了解有关何时自动升级和阻止混合图像的最新信息,如果他们无法通过 https:// 加载。

那个状态条目说:

在开发者试用(在标志后面)(跟踪错误)中:
桌面版 Chrome 86
适用于 Android 的 Chrome 版本 86
Android WebView 发布 86

最后更新于 2020-11-03

所以这个功能被推迟了,但它即将来了。

【讨论】:

  • 谢谢 - 不幸的是,当我点击状态条目中“跟踪错误”的链接时,我收到了Permission denied,所以我会继续检查每个 Canary 版本,看看情况是否有变化。
【解决方案2】:

通过您的问题和所有 cmets - 设身处地为您着想,我会做以下事情:

  1. 既不干扰当前工作的 .Net 应用程序/本地主机服务器 (HTTP),也不干扰面向用户 (HTTPS) 的前端。
  2. 编写一个简单/廉价的云函数(GCP Cloud Function 或 AWS Lambda)以从前端完全抽象出您的 .Net 应用程序。您当前的 HTTPS 应用程序只会调用云功能(HTTPS 到 HTTPS - 不必再祈祷 Google 不会关闭混合流量,这最终会发生,尽管没人知道什么时候发生)。
  3. 云功能只是将来自(不安全的).Net 应用程序的图像/数据临时复制到云存储,然后通过 HTTPS 直接将其提供给您的客户端。

【讨论】:

  • 这里的关键字是“不安全”。您正在提议在外部服务器上运行的包装器访问运行在单个公司桌面上的软件?
  • 这里有一个商业决策要做。 .Net 遗留端目前本质上是不安全的(仅服务于 HTTP)。它要么被重写以安全地服务,要么被包裹在一个安全层中——这是我提议的。从安全的角度来看,当前的方式更糟糕(公司桌面通过混合流量直接暴露给 WWW)。当然,我的假设是,他们想要传递给客户端的这些图像不属于机密。现在,您确实为他们的问题提供了一个很好的答案,但我只是想分享一个潜在的实用方法。
  • “现在,你确实给了他们一个很好的回答他们的问题”很好,因为你根本没有回答这个问题。关于你的建议,OP 说他们已经计划完全摆脱这个应用程序,这显然是最好的主意,如果需要,他们可以加快速度。与此同时,还有其他想法,例如只能通过特定 URL 访问的 Chrome 扩展程序,或 本地 包装器(在桌面或公司服务器上)。我知道这些想法有其自身的问题,但至少在讨论您帖子中的想法之前提及它们。
  • 注意到布赖恩。感谢您的反馈。
猜你喜欢
  • 2015-07-21
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 2015-08-13
  • 2018-12-19
相关资源
最近更新 更多