据我了解,2017年,Apple将拒绝在Allow Arbitrary Loads中启用Info.plist的所有应用程序:

ios - 在2017年,关于ATS设置,我们应该如何处理没有HTTPS的LAN请求?-LMLPHP

另请参阅:https://nabla-c0d3.github.io/blog/2016/08/14/ats-enforced-2017/

我们的应用正在用户家中控制智能设备。这就是说,我们不是在与Internet通讯,而只是通过HTTP与LAN设备通讯。所有这些设备都不支持HTTPS。我们应该如何配置这些App Transport Security Settings而又不让我们的应用程序被Apple拒绝?

编辑: Apple has delayed the SSL/ATS requirement to after 1/1/2017

最佳答案

只是要澄清一下,Apple将拒绝使用ATS例外的应用程序来为2016年12月31日之后提交的应用程序禁用ATS,除非有合理的理由说明该应用程序必须使用该例外。我们只是不知道苹果会接受什么原因。

因此,不幸的是,对于iOS 9中的ATS阻止本地网络资源并没有一个很好的解决方案。据我所知,您有2个选择。

  • 继续支持iOS 9,并添加全局ATS例外,并希望当您在2016年12月31日之后提交应用程序时,Apple会接受您的理由支持iOS 9和禁用ATS的情况下访问本地网络资源。在2017年1月1日之前,很难知道Apple会认为哪种类型的理由是合理的,但是Apple已明确表示将有一个程序来证明应用程序使用ATS例外。如果您采用这种方法,我会尝试在1月初向应用程序进行一次小小的更新,但仍会出现ATS异常,以查看是否可以通过此过程。
  • 放弃对iOS 9的支持,删除通用ATS例外(NSAllowArbitratyLoads),而改用NSAllowsLocalNetworking例外来仅在本地网络流量上关闭ATS保护。 iOS9不支持此功能,因此您需要使新应用仅适用于iOS 10。基本上,只有NSAllowsLocalNetworking plist条目设置为true的iOS9设备上的本地流量会被ATS阻止。根据您的客户群,这可能是可行的。在您发布iOS 10之前,iOS 9用户仍然可以获取该应用程序的最新版本。

  • 编辑:

    因此,看来苹果公司正在iOS 10中使用一些自定义行为,以使iOS 10上的应用程序更安全,同时允许iOS 9向后兼容。如果在info.plist中同时包含NSAllowsArbitraryLoadsNSAllowsLocalNetworking,则iOS9仅识别NSAllowsArbitraryLoads条目,并允许所有流量(从安全角度来看不是很大,但将适用于您的本地网络流量)。在iOS 10中,使用NSAllowsLocalNetworking将导致iOS 10忽略NSAllowsArbitraryLoads条目,这意味着您的应用将确保对非本地连接强制实施ATS,但允许本地连接通过。显然,您应该在iOS 9和10上测试您的应用程序,但是从安全角度来看,如果仍然需要支持iOS 9,这将是理想的选择。请务必注意,您仍然需要向Apple提供证明,但这很重要。 Apple可以使用此功能来处理这种确切情况,我敢打赌向后兼容将是公认的理由。

    从苹果的documentation:

    在iOS 10和更高版本以及macOS 10.12和更高版本中,此键的值
    如果您的应用程序中存在以下任何键,则将被忽略
    Info.plist文件:
    NSAllowsArbitraryLoadsForMedia
    NSAllowsArbitraryLoadsInWebContent
    NSAllowsLocalNetworking
    

    关于ios - 在2017年,关于ATS设置,我们应该如何处理没有HTTPS的LAN请求?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41101931/

    10-14 16:59
    查看更多