这是关于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的最佳方式,并允许在应用程序中获得良好的冲浪体验。
答案 0 :(得分:0)
基本上,您应该通过尽可能少的例外来满足您的应用需求。这里的许多答案都指导开发人员一起禁用ATS。这有两个原因 -
但你走在正确的轨道上。如果应用程序正在从不支持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例外辩护时,这种努力肯定会有所帮助。