【问题标题】:File security when device is locked and background fetch in iOS7iOS7中设备锁定和后台获取时的文件安全性
【发布时间】:2013-09-28 09:33:21
【问题描述】:

我正在使用这样的 NSFileProtectionKey 属性来使用文件安全性:

[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey : NSFileProtectionComplete} ofItemAtPath:coreDataFilePath error:NULL];

因此,当设备密码锁定时,无法打开该路径中的文件。问题是即使设备被锁定,iOS7 应用程序也可以在后台运行。当这样运行时,Coredata [NSManagedObjectContext save:] 将失败并出现错误:

NSCocoaErrorDomain, 134030, 操作无法完成。 (可可错误 134030。){ NSSQLiteErrorDomain = 23; NSUnderlyingException = "更新最大 pk 失败:授权 拒绝”;}

这种情况如何处理?

【问题讨论】:

    标签: ios core-data ios7 nsfilemanager


    【解决方案1】:

    首先,请参阅 WWDC 2013 视频中的第 204 节“多任务处理的新功能”。它涵盖了这种情况。

    您可以采取多种方法,按照安全偏好的顺序排列:

    • 将数据写入另一个位置(使用NSFileProtectionCompleteUnlessOpen)直到设备解锁,然后合并。这通常是首选方法。
    • 将主数据库设置为 NSFileProtectionCompleteUnlessOpen 并保持打开状态。
    • 将您的数据库设置为NSFileProtectionCompleteUntilFirstUserAuthentication。这通常是最糟糕的方法。

    【讨论】:

    • 关于“将数据写入另一个位置(使用 NSFileProtectionCompleteUnlessOpen)直到设备解锁,然后合并。这通常是首选方法。”在用户决定解锁设备之前,如何存储要写入核心数据的数据。
    • 要么通过编写网络格式(通常是 JSON)。或者使用 NSCoding 序列化对象。在任何一种情况下,通过保存到文件直到 Core Data 被解锁。
    • 不将原始文件保存到磁盘会给应用程序安全带来另一个风险。无论如何,您对如何检测核心数据是否已解锁有任何建议。
    • 如果设置了 NSFileProtectionCompleteUnlessOpen,新文件将被加密。您可以在锁定时创建新的加密文件。您可以通过 UIApplication protectedDataAvailable 查看保护状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多