iOS ATS机制
来源:互联网 发布:js狙击枪 编辑:程序博客网 时间:2024/06/08 16:19
ATS 全称 App Transport Security,是 iOS 9 引入的一套安全机制,默认行为会强制保证所有的网络请求都使用 HTTPS。相信这个大家都有所了解。 在 iOS 10 中苹果对 ATS 的安全机制更加进步了一层,咱们来聊聊吧。
ATS 简介
如果你在 iOS 9 以上平台编译项目后,你会发现无论你使用 NSURLSession 请求接口数据,或者使用 WebView 打开网页,只要不是 HTTPS 协议都会失败。造成这个现象的原因就是 iOS 9 引入的 ATS 机制。
当然,苹果在引入这个特性的时候,也会考虑到开发者的过渡问题,所以还为我们留了一个开关,只需要在 Info.plist 中加上这个节点即可关闭 ATS 的默认行为:
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
其中 NSAppTransportSecurity 是 ATS 设置项的根节点, NSAllowsArbitraryLoads 代表是否允许访问任意资源。 我们只需要将这个属性设置为 true, 就可以关闭 ATS 的默认拦截行为,继续使用 HTTP 了。
iOS 10 中的变化
iOS 10 依然延续了 ATS 机制。并且把它加强了。 从苹果官方目前发布出来的消息上看, 在 2017 年一月份开始,就不再允许开发者打开 NSAllowsArbitraryLoads 设置了。
也就是说,这种将 ATS 全局关闭的能力不给我们了。 可见苹果这次的决心。
那么,我们不能全局关闭 ATS 是否就意味着我们必须强制使用 HTTPS 呢? 下面咱们继续讨论。
ATS 除了提供一个 NSAllowsArbitraryLoads 属性,其实还有另外的属性。 可以设置 NSExceptionDomains 属性来将需要排除强制验证的域名写进来。 也就是说我如果我们的 app 只访问我们自己的服务器, 我们可以将我们服务器的域名添加进来,依然可以继续使用 HTTP。但我们不能像之前那样简单粗暴的直接把所有的请求都通过。这样就更加精确,其实对真正的用户来说,这其实是一个好事。尽管他们或许感知不到,但这样确实可以极大的减少用户的安全风险。
NSExceptionDomains 的设置方法如下, 比如我们要将 swiftcafe.io 这个域名排除在 ATS 验证之外,就可以这样:
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/><key>NSExceptionDomains</key><dict><key>swiftcafe.io</key><dict><key>NSExceptionAllowsInsecureHTTPLoads</key><true/></dict></dict></dict>
上面说的是在我们已经确定 App 所访问的数据范围的情况下的处理方法。 但还有一种情况, 如果我们开发的是类似浏览器的 App。这样用户需要输入任意的地址,那怎么办呢? 我们不可能把所有的域名都写到 NSExceptionDomains 里面。
这就可以使用 iOS 10 对 ATS 提供的一个新属性 NSAllowsArbitraryLoadsInWebContent。 顾名思义了,就是只允许加载任意类型的 web 内容。这样我们的 WKWebView 就可以加载任何类型的页面了。
使用 NSAllowsArbitraryLoadsInWebContent 的例子:
<key>NSAppTransportSecurity</key><dict> <key>NSAllowsArbitraryLoadsInWebContent</key> <true/></dict>
结尾
总之 iOS 10 之后,对于 ATS 的安全保护会更加加强。也能看出苹果对于尽可能的去掉 HTTP 不安全性的决心。所以大家如果在提交新 App 的时候,需要注意一下这个特性,并及时作出相应的调整。
- iOS ATS机制
- iOS 10 与 ATS
- iOS 10 适配 ATS
- iOS 10 适配 ATS
- iOS 10 适配 ATS
- iOS ATS (App Transport Security)
- ATS
- ATS
- ATS
- ats
- iOS 9之适配ATS
- iOS 9之适配ATS
- iOS 9之适配ATS
- iOS 9之适配ATS
- 【IOS网络】ATS的小总结
- 关于 iOS 10 中 ATS 的问题
- 关于 iOS 10 中 ATS 的问题
- 关于 iOS 10 中 ATS 的问题
- 1.16
- JavaScript实现下拉菜单
- php程序使用cassandra
- linux常用的20个命令
- 摘取最多苹果数
- iOS ATS机制
- logstash 配置使用
- java定时器的使用(Timer)
- Java对象的序列化和反序列化
- 实现java接口@Override报错
- 在Jetson TX1上编译运行Faster R-CNN
- 简单windows共享内存封装类
- karabiner macOs Sierra不可用后的临时解决方法
- Windows下MYSQL密码忘记的解决方法