【问题标题】:How to store private file on iOS safely如何安全地在 iOS 上存储私人文件
【发布时间】:2017-06-03 14:37:07
【问题描述】:

在 Android 上,我可以使用 Context.openfileoutput 将文件存储到一个受到相当保护的文件中。它将保存到特定于我的应用程序的内部磁盘,其他应用程序无法访问,唯一的方法是通过连接调试器/生根设备。这不是 100% 防黑客攻击,但已经足够了。

这是 iOS 上存在的东西吗?

我读过https://developer.apple.com/library/content/qa/qa1699/_index.html,但这安全吗?就像我猜它看起来像

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
                           NSString *librariesDirectory = [paths objectAtIndex:0];
                           NSLog(@"%@", librariesDirectory);
                           NSString *filePath = [NSString stringWithFormat:@"%@/%@/%@", librariesDirectory,@"Private", @"internal_image.jpg"];

这个文件会是什么

  • 其他应用无法访问
  • 不备份到 icloud
  • 应用很容易看到,但最终用户看不到

?

【问题讨论】:

  • 是的。实际上iOS就是这样工作的。每个应用程序都有自己的沙箱。您存储东西的一般位置有 2 个 - Doc 和 Temp 文件夹(这两个位于应用程序沙箱中)。
  • 附加说明:虽然这些文件对普通用户是“隐藏”的,但无法阻止人们在越狱设备中看到这些文件。

标签: ios objective-c security internal-storage nslibrarydirectory


【解决方案1】:

如果您要存储敏感信息,那么唯一真正安全的存储位置就是钥匙链。显然,您不想将所有数据都粘贴在密钥链中,因此只需将加密密钥存储在那里并加密您的信息并将其存储在文档目录中。如果有人访问文档目录,例如从 iCloud 备份,他们将无法在不解密文件的情况下读取文件的内容。

【讨论】:

  • 有什么地方我可以粘贴它,这样它就不会通过 iCloud 备份?
【解决方案2】:

1) 使用您的数据创建文件

2) 生成高熵加密密钥并加密文件

3) 将加密密钥保存到您的服务器

4) 将加密文件保存到库文件夹并将NSURLIsExcludedFromBackupKey标志设置为true

•) 现在文件位于不会备份到 iCloud 的位置,其他应用程序无法访问,用户可以访问但已加密,因此他们无能为力。


关于 NSURLIsExcludedFromBackupKey 的好信息:https://stackoverflow.com/questions/27216189/files-disappearing-from-nslibrarydirectory/27309392#27309392

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多