据我了解,2017年,Apple将拒绝在Allow Arbitrary Loads
中启用Info.plist
的所有应用程序:
另请参阅: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个选择。
NSAllowArbitratyLoads
),而改用NSAllowsLocalNetworking
例外来仅在本地网络流量上关闭ATS保护。 iOS9不支持此功能,因此您需要使新应用仅适用于iOS 10。基本上,只有NSAllowsLocalNetworking
plist条目设置为true的iOS9设备上的本地流量会被ATS阻止。根据您的客户群,这可能是可行的。在您发布iOS 10之前,iOS 9用户仍然可以获取该应用程序的最新版本。 编辑:
因此,看来苹果公司正在iOS 10中使用一些自定义行为,以使iOS 10上的应用程序更安全,同时允许iOS 9向后兼容。如果在info.plist中同时包含
NSAllowsArbitraryLoads
和NSAllowsLocalNetworking
,则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/