ios - 我需要使用 NSExceptionDomains,还是可以完全禁用 App Transport Security?

标签 ios app-transport-security

我正在开发一个可以流式传输许多远程实时视频的应用程序。这些直播视频的 URL 各不相同,其中大多数使用 HTTP 而不是 HTTPS。

通过设置 AllowArbitraryLoads 完全禁用应用程序传输安全性是否有任何缺点?是吗?或者我应该使用 NSExceptionDomains ?是否有任何其他选项可以为应用程序用户提供最大的安全性,同时确保应用程序在尝试与媒体服务器通信时不会遇到问题。

最佳答案

使用 NSAllowsArbitraryLoads 完全禁用 ATS 时通常是在 SO 上给出和接受的解决方案,它带来了开发人员应该注意的一些后果。首先,截至目前(2017 年 8 月),Apple 允许开发人员根据他们的选择使用该设置来禁用 ATS。但是,Apple 表示他们将开始要求开发人员提供使用该 key 完全关闭 ATS 的理由。苹果最初计划在 2017 年 1 月开始强制执行正当理由的必要性,但被无限期推迟。对我来说,继续使用 NSAllowsArbitraryLoads 对开发人员来说是一种风险。设置为当 Apple 开始执行新政策时,开发人员可能无法将其应用程序的关键修复提交到应用商店。

特别是针对您关于流媒体视频的问题,您可以使用以下几个选项:

NSAllowsArbitraryLoadsForMediaContent

从 iOS 10 开始,Apple 提供了一个新 key NSAllowsArbitraryLoadsForMediaContent用于从 ATS 要求中排除媒体内容。根据 Apple 的指导方针,该 key (以及类似的 NSAllowsArbitraryLoadsForWebContent )不需要证明。

但是,由于此 key 仅在 iOS 10 中添加,因此如果您的应用需要支持在 iOS 9 设备上运行,则会出现问题。幸运的是,Apple 也提供了一种方法来做到这一点。要支持 iOS 9 和 iOS 10+ 设备,您需要添加 两个 NSAllowsArbitraryLoadsForMediaContent NSAllowsArbitraryLoads到你的 list 。由于 iOS9 不知道 NSAllowsArbitraryLoadsForMediaContent ,它只看到/关心 NSAllowsArbitraryLoads key ,并将禁用 iOS 9 设备的所有 ATS 合规性检查。因为 iOS10 知道新 key ,它会忽略“NSAllowsArbitraryLoads”,只禁用媒体流的 ATS 合规性检查。

因为如果您需要支持 iOS9 设备,这是 Apple 推荐的方法,如果您确实需要在 future 某个时候提供理由,您可以简单地说这是 Apple 推荐的方法来支持 iOS 9 设备上的非 https 流媒体流.至少他们会看到您正在尝试允许 ATS 提供它的服务。

NSExceptionDomains

如果您知道您的媒体所在的所有域不支持所有 ATS 要求,并且 NSAllowsArbitraryLoadsForMediaContent方法不适合你,我建议使用 NSExceptionDomains下一个。再次,它向 Apple 表明您正在尝试限制您的应用程序用户必须暴露于不安全的服务器连接的数量。如果您稍后确实需要向 Apple 提供理由,您可以简单地让他们知道这些域不在您的控制之下,但您的应用程序的其余通信仍然受到 ATS 合规性检查的保护。

NSAllowsArbitraryLoads

此时,有些应用程序可能需要使用此设置。但是这些应该基本上仅限于允许用户输入服务器的应用程序(开发人员不知道应用程序可能需要与哪些服务器进行通信。这些应用程序非常罕见。大多数应用程序只是设置这个,因为它们在开发中出现错误从 iOS9 开始,并阅读一些 SO 答案,如果您设置标志,错误就会消失。可悲的是,我认为盲目遵循该建议的应用程序数量可能是导致 Apple 试图强加正当理由的原因。

即使您使用 NSAllowsArbitraryLoads设置,最好的做法是还使用 NSExecption 域添加异常(exception)以*重新打开 ATS 合规性检查** 为您控制的符合 ATS 的域。然后至少 Apple 会知道您正在保护您控制的连接。

所以只能使用 NSAllowsArbitraryLoads作为您真正无法知道服务器连接的应用程序的最后手段。

关于ios - 我需要使用 NSExceptionDomains,还是可以完全禁用 App Transport Security?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766221/

相关文章:

ios - 尝试通过 Apple Ad 在 App Store 下载应用程序时,应用程序跟踪透明度权限未提示

ios - 应用程序传输安全加载即使添加后也出错

ios - 在我的 iOS 应用程序中包含一个 HTTP(而非 HTTPS)URL 链接,我是否需要禁用应用程序传输安全?

iOS 在设置中检查 3D Touch 启用

ios - 相机覆盖 View 中的自动布局 - 无法垂直居中按钮

iphone - Bug Village iPad 游戏自动通知

ios - 查找关闭多边形 iOS 的总数

ios - 可选值上的 Swift KeyPath

ios - 如何在 iOS 9 中启用应用程序传输安全性时加载 HTTP URL?

ios - App Transport Security 阻止 HTTPS