【问题标题】:Safari 9 disallowed running of insecure content?Safari 9 不允许运行不安全的内容?
【发布时间】:2015-12-29 06:07:48
【问题描述】:

升级到 Safari 9 后,我在浏览器中收到此错误:

[Warning] [blocked] The page at https://localhost:8443/login was not allowed to run insecure content from http://localhost:8080/assets/static/script.js.

有人知道如何在新的 Safari 上启用不安全内容的运行吗?

【问题讨论】:

  • 顺便说一句,为了解决这个问题,我们目前通过 https 提供所有资产。但是Safari不应该允许启用混合内容的方法吗?没有?
  • 这非常令人沮丧。有正当理由需要有一个加载某些内容的 https 页面(例如 RPC 或本地服务)。 Apple 不应该在没有办法恢复的情况下禁用行为。
  • 实际上,这对苹果来说是一个合理的安全预防措施。通过允许混合内容,有人可以注入恶意代码或窥探会话(如果它是动态的)。如果您担心使用 SSL/TLS 对性能的影响,只需将 HTTP/2 支持添加到您的服务器即可。基准测试显示了巨大的性能改进,使其在从同一域中获取大量资产或 ajax 时与 HTTP/1.1 一样快。
  • 同意@JaredKipe - 它是第三方产品尤其令人沮丧(我们有一台打印机,它通过 HTTP 为 API 提供服务。它正确实现了 CORS)。这只是向服务器“添加 TLS”的情况。 Safari 9 现在已经破坏了现有的部署服务。

标签: safari mixed-content safari9


【解决方案1】:

根据Apple support forums Safari 不允许您禁用对混合内容的阻止。

虽然这对于像您这样的合法案例的可用性令人沮丧,但这似乎是他们强制安全内容服务/内容服务最佳实践的一部分。

作为您的解决方案,您可以将 HTTP 连接升级到 HTTPS(您似乎已经这样做了)或通过 HTTPS 连接与启用 HTTPS 的服务(或在您的情况下为端口)代理您的内容。

【讨论】:

  • 问题在于,如果您的 HTTPS 站点链接到单个 HTTP 图像或其他非“安全”资源,某些服务会停止工作(地理定位)。这只是让 Safari 9 无法使用
  • @Jamgold 禁用混合内容或 HTTP 内容的服务,即使它只是一个图像,对 Apple 来说也是一个好主意。因为 Safari 不知道网站打算如何处理不安全的内容,并且网络级别的攻击者能够操纵不安全的内容,所以允许任何不安全的内容都有可能危及通过服务公开的用户信息。
  • 正如其他用户已经指出的那样,有时您无法修复 HTML 来自的 Web 服务器,有时您有一个 HTTPS Web 服务器,其中包含从其他站点链接的内容(图像)(原始概念网络,我相信),一夜之间,Safari 打破了这一切
  • @staelen 如果这是正确答案,您介意将其标记为这样吗?谢谢
【解决方案2】:

您可以通过在本地使用带有自签名 SSL 证书的 HTTPS 来解决 HTTPS 问题。 Heroku has a great how-to article about generating one

在所有开发服务器上设置 SSL 后,在 Safari 中加载资源仍然会出错,因为正在使用不受信任的证书(默认情况下,浏览器不信任自签名 SSL 证书,因为它们无法通过验证受信任的权威)。要解决此问题,您可以在 Safari 的新选项卡中加载有问题的 URL,浏览器会提示您允许访问。如果您在提示中单击“显示证书”,则证书详细信息视图中将有一个复选框以“始终允许来自本地主机的内容”。在允许访问之前选中此项会将设置存储在 Safari 中以供将来使用。允许访问后,只需重新加载最初出现问题的页面即可。

作为开发人员,这是一个有效的用例,但请确保您完全了解通过此更改添加到系统中的安全隐患和风险!

【讨论】:

    【解决方案3】:

    如果你和我一样

    • port1 上的前端
    • port2b 上的后端
    • 想从http://localhost:port2/backendPage加载脚本http://localhost:port1/app.js

    我找到了一个简单的解决方法:只需使用 http 响应将您的后端服务器配置中的所有 http://localhost:port2/localFrontend/*path 重定向到 http://localhost:port1/*path

    然后您可以直接从http://localhost:port2/localFrontend/app.js 加载您的脚本,而不是直接从前端网址加载。 (或者您可以为所有资源配置一个基本 url)

    这样,Safari 将能够从另一个域/端口加载内容,而无需任何 https 设置。

    【讨论】:

      【解决方案4】:

      对我来说,禁用网站跟踪,即取消选中 Prevent cross-site tracking 工作。

      【讨论】:

      • 很遗憾,这并没有解决我的问题。
      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 2016-06-28
      • 2013-04-27
      • 2012-07-01
      • 1970-01-01
      • 2010-10-06
      • 2021-07-30
      • 2020-06-03
      相关资源
      最近更新 更多