iOS ATS - 它是如何工作的,以及如此多的应用程序如何忽略它

时间:2017-09-15 09:32:37

标签: ios app-transport-security

这是关于App Transport Security的更一般性问题/讨论。 ATS确保iPhone和互联网之间的所有网络流量都安全地完成(即HTTPS)。这在理论上确实很好,除了有许多网站没有HTTPS版本。我在这个问题上所做的大部分阅读都归结为:

"好吧,这不是问题,因为我们的应用只需要与我们的后端交谈,我们可以在那里控制安全性"

但是,如果您的应用不与一个后端通话怎么办?如果你没有那么多控制权怎么办?

"我的应用程序通过各种来源进行新闻聚合,这些来源可能有也可能没有HTTPS链接,我无法控制他们做什么"

例如,ESPN的面向公众的网站没有HTTPS端点。如果您转到https://espn.com,它会将您重定向到http://espn.com

对此问题的另一个常见反应是:"好的,将espn添加到ATS Exception Domains"

更为一般 - 像Facebook这样使用自己的内置浏览器的应用程序如何处理这样一个事实:人们在时间轴上发布链接可能会也可能不会使用HTTPS链接?当然,他们不会在info.plist

中将整个互联网列入白名单

有什么想法吗?我知道这是一个相当广泛的&开放式问题,但我真的想弄清楚什么是遵守ATS的最佳方式,并允许在应用程序中获得良好的冲浪体验。

1 个答案:

答案 0 :(得分:0)

基本上,您应该通过尽可能少的例外来满足您的应用需求。这里的许多答案都指导开发人员一起禁用ATS。这有两个原因 -

  1. 可能会降低应用通信的安全性
  2. 在某些时候,Apple将开始强制执行他们的理由 在WWDC 2016上告诉开发人员。
  3. 但你走在正确的轨道上。如果应用程序正在从不支持HTTPS(或转发保密或TLS 1.2)的服务器访问服务器基础资源,则应仅针对ATS缺少的区域添加NSExceptionUrls。同样,如果URL支持TLS 1.2,则不要禁用所有ATS,但不支持前向保密。在这种情况下,只需添加要求前向保密的例外。这将使Apple的未来可能性变得更加容易 - “我们不控制服务器,或者我们可以支持前向保密,但我们仍然允许ATS保护应用程序用户的其他所有内容。

    对于未知服务器(例如用户指定的服务器),您可能必须使用NSAllowsArbitraryLoads异常全局禁用ATS。但是,不要止步于此。如果您确实连接到自己的符合ATS的服务器,则可以在为该URL启用ATS的位置添加URL例外。再次,这表明Apple正在尝试尽可能强制执行aTS保护。

    最后,对于特定内容(例如网页浏览),您无法控制用户的去向,因此您可以指定NSAllowsArbitraryLoadsInWebContent例外以保护WKWebView或SFSafariViewController中没有的所有内容,同时让用户浏览可能不支持所有ATS要求的网站。

    因此,长话短说,尽量让ATS保持开启状态,以便最好地保护用户的隐私/数据,同时仍然为他们提供所需的功能。当Apple开始要求为您的ATS例外辩护时,这种努力肯定会有所帮助。