这是关于保护静态用户数据的三篇文章的第一篇。 在本文中,我们将从保护iOS上的数据的基础开始,以便您了解使用Swift安全地存储数据的当前最佳实践。
任何保存用户数据的应用都必须注意该数据的安全性和私密性。 正如我们在最近的数据泄露中所看到的那样,如果未能保护用户的存储数据,可能会造成非常严重的后果。 在本教程中,您将学习一些保护用户数据的最佳实践。
权限
在开始存储您的自定义数据之前,让我们看一下系统应用程序可以共享的数据。
对于许多iOS版本,要求获得应用程序权限才能使用和存储应用程序外部的某些用户私人数据,例如在将图片保存并加载到照片库时。 从iOS 10开始,任何访问用户私人数据的API都要求您提前在项目的info.plist文件中声明该访问权限。
有许多框架可以访问应用程序外部的数据,并且每个框架都有一个对应的隐私密钥。
- 蓝牙共享:
NSBluetoothPeripheralUsageDescription
- 日历:
NSCalendarsUsageDescription
- CallKit:
NSVoIPUsageDescription
- 相机:
NSCameraUsageDescription
- 联系人:
NSContactsUsageDescription
- 运行状况:
NSHealthShareUsageDescription
,NSHealthUpdateUsageDescription
- HomeKit:
NSHomeKitUsageDescription
- 位置:
NSLocationAlwaysUsageDescription
,NSLocationUsageDescription
,NSLocationWhenInUseUsageDescription
- 媒体库:
NSAppleMusicUsageDescription
- 麦克风:
NSMicrophoneUsageDescription
- 运动:
NSMotionUsageDescription
- 照片:
NSPhotoLibraryUsageDescription
- 提醒:
NSRemindersUsageDescription
- 语音识别:
NSSpeechRecognitionUsageDescription
- SiriKit:
NSSiriUsageDescription
- 电视提供商:
NSVideoSubscriberAccountUsageDescription
例如,这是info.plist中的一项,可让您的应用加载值并将其存储到日历中。
<key>NSCalendarsUsageDescription</key>
<string>View and add events to your calendar</string>
如果在API尝试访问数据时缺少使用说明,则该应用将简单地崩溃。
数据保护API
对于应用程序内部的任何用户数据,首先要考虑的是您是否需要存储信息以及哪些数据对于应用程序必不可少。 将尽可能多的基本数据保留在工作内存中,而不是文件存储中。 对于任何个人身份信息,这尤其重要。
但是,如果必须存储数据,则启用Apple的数据保护是一个好主意。
数据保护会加密应用程序容器的内容。 它依赖于具有密码的用户,因此加密的安全性取决于密码的强度。 通过iOS 10.3中引入的Touch ID和升级的文件系统加密,数据保护系统有了很多改进。 通过在项目文件的“ 功能”部分中打开“ 数据保护” ,可以在整个应用程序中启用数据保护。 这将更新您的配置文件和权利文件,以包括数据保护功能。 数据保护提供四个保护级别,由FileProtectionType
结构描述:
-
none
:无保护。 -
complete
:设备锁定时无法访问数据。 这是大多数应用程序的推荐设置。
-
completeUnlessOpen
:解锁设备后可以访问数据,并且即使用户锁定了设备,在文件关闭之前也可以继续访问数据。 设备锁定时也可以创建文件。 当您需要打开文件进行处理并让处理继续进行时,即使用户将应用置于后台并锁定了设备,此选项也非常有用。 例如将文件上传到服务器的作业。