【问题标题】:WKWebView http -> https redirection for iOS 10 ATS ComplianceWKWebView http -> iOS 10 ATS 合规性的 https 重定向
【发布时间】:2017-05-12 13:51:43
【问题描述】:

iOS 10 将 https 强加给我们,完全破坏了我正在开发的应用程序。该应用程序部分是一个 RSS 阅读器。我们从 RSS 提要获得的 URL 通常是 HTTP URL,既用于站点,也用于元数据图像。这些 HTTP URL 在 safari 和 SFSafariViewController 中可用时被重定向到 https 版本。但是,当使用WKWebView 时,不会发生这种重定向。操作系统只是完全阻止了非 https 加载。如果我试图通过在 URL 中将“http”换成“https”来解决这个问题,网站通常会在从 HTTP CDN 加载图像、CSS 和 JavaScript 时中断,并且这些请求也会被阻止。如何在 WKWebView 中获得与 Safari 中相同的行为?有我可以设置的配置吗?在我看来,Apple 会做出这种改变并使用WKWebView 破坏客户,这让我觉得很疯狂。

附: Facebook 能够以某种方式解决这个问题。我不知道这是否是一个严重黑客攻击SFSafariViewController 或者他们以某种方式使网络视图工作。有谁知道他们是怎么做到的?

【问题讨论】:

    标签: ios10 wkwebview app-transport-security sfsafariviewcontroller


    【解决方案1】:

    使用NSAllowsArbitraryLoads。钥匙仍然可以使用; Apple 只是想确保您有充分的理由使用它。在您的应用程序内显示外部内容符合此条件。 Apple ATS 规则生效后,您需要解释为什么需要它,以及为什么 NSAllowsArbitraryLoadsInWebContent 还不够。既然您已经有了答案,那么使用NSAllowsArbitraryLoads 让您的应用通过审核流程应该没有问题。

    请注意,Apple has postponed ATS requirement 不会在 2017 年 1 月生效。

    【讨论】:

      【解决方案2】:

      在翻遍 Apple 的文档 here 之后,我找到了新的 NSAllowsArbitraryLoadsInWebContent 密钥。这解决了 WKWebView 的问题,尽管令人沮丧地通过 http 获取图像仍然存在问题。我可能最终不得不通过我自己的服务器代理它们。

      【讨论】:

      • 您知道您仍然可以使用NSAllowsArbitraryLoads 键,对吧?你只需要有一个令人满意的理由这样做,而你的 - 一个显示外部内容的应用程序 - 就足够了。此外,Apple 暂时推迟了 ATS 要求:developer.apple.com/news/?id=12212016b
      • @LeoNatan 我在文档中读到上面的键是用于使用 AVFoundation 框架的东西。如何使用它来简单地通过 http 加载图像并将它们显示在图像视图中?
      • 哦不,我是说NSAllowsArbitraryLoads
      • @LeoNatan 哦!我不知道他们退缩了。
      • 他们没有退缩。该密钥仍可供使用。例如,任何浏览器应用程序都需要此密钥。它不会消失。 Apple 只是想确保你有充分的理由使用它。
      【解决方案3】:

      虽然您可以简单地使用NSAllowsArbitraryLoads' 来全局关闭传输安全性,但这并不理想,而且在没有非常可靠的理由的情况下更有可能被 Apple 拒绝。

      将在 iOS 9 和 iOS 10 中提供正确行为的更好解决方案是将 NSAllowsArbitraryLoadsNSAllowsArbitraryLoadsInWebContent 都放在 info.plist 中。因为 iOS 9 不承认 NSAllowsArbitraryLoadsInWebContent,它会尊重 NSAllowsArbitraryLoads,有效地关闭 iOS 9 设备的传输安全性为您的应用程序。

      在 iOS 10 中,如果您包含 NSAllowsArbitraryLoadsInWebContent'key,iOS 将忽略 NSAllowsArbitraryLoads 设置,仅在您应用的 Web 视图中禁用应用传输安全性。这将意味着您的应用在 iOS 10 中更加安全,我相信这将使苹果更有可能排除您使用应用传输安全例外的理由

      【讨论】:

      • 从 OP 的回答中可以看出,在这种情况下,NSAllowsArbitraryLoadsInWebContent 键是不够的。然而,该应用程序确实有一个“非常可靠的理由”。
      • 我在原始问题中没有看到任何地方表明用户试图允许任意加载 Web 内容。我也看不出我的答案不是一个更好的解决方案,因为它不只是盲目地允许在应用程序中加载任何不安全的内容。这里有太多关于堆栈溢出的答案,只是告诉人们允许任意加载,而没有提供提供更安全解决方案的选项。
      • OP 回答了他们自己的问题,指出您的建议还不够。看一看:stackoverflow.com/a/41360003/983912
      • 当应用程序显示应用程序开发人员无法控制的外部内容时,使用NSAllowsArbitraryLoads 绝对没有任何问题。 NSAllowsArbitraryLoadsInWebContentNSAllowsArbitraryLoadsForMedia 给出了一个具体的解决方案,但它们并不总是足够的,就像在这种情况下一样。
      • 我从未说过该解决方案行不通。但是,如果开发人员只是在 webviews 中加载不安全的内容,那么您将在应用程序中的所有网络活动中禁用应用程序传输安全性,而您可能只需要为 web 内容禁用它。如果 OP 回来说 NSAllowsArbittaryLoadsInWebContent 设置在他的特定情况下不起作用,那么你是对的。我只是没有看到任何表明 OP 尝试这样做的东西。对我来说,值得先这样做,然后只在更安全的解决方案不起作用时才使用全局 NSAllowsArbittaryLoads
      【解决方案4】:

      编辑:我的以下答案不正确。它不适用于返回 XSL 的站点,例如在 feedburner 上托管的 RSS 提要。我无法找到解决方案,所以很遗憾我要重新启用任意加载。


      我们的应用程序还具有通用的 RSS 阅读器功能。我们希望使用 ATS 来提高安全性并符合 Apple 的要求。此外,许多企业客户认为禁用它是一种高风险。因此,启用“允许任意负载”对我们来说不是一个有效的选项。

      目前,我们通过做两件事充分利用了这一点: 1.启用Allow Arbitrary Loads in Web Content。我们还有一个显示客户内容的通用网络视图。 2. 使用不可见的WKWebView 加载RSS 提要,然后从网页中提取HTML 并解析XML。我为here创建了一个要点@

      不知何故,这个可怕的黑客似乎符合我们的目的,目前。

      如果有一个解决方案允许您在 URL 会话级别覆盖传输安全性,那就太好了。

      【讨论】:

        猜你喜欢
        • 2017-01-30
        • 1970-01-01
        • 2021-06-26
        • 2013-06-02
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        相关资源
        最近更新 更多