【问题标题】:Where should the sensitive information be stored?敏感信息应该存储在哪里?
【发布时间】:2015-05-03 02:59:18
【问题描述】:

在 NSUserDefaults 中存储敏感数据公平吗?

我了解到这是一个大问题,因为 NSUserDefaults 以二进制格式存储在 plist 中,没有加密,并且存储在您的应用程序目录中。这意味着任何用户,即使是“最笨”的用户,都可以用 5 分钟的时间来修改您的 NSUserDefaults。

任何用户都可以编辑、查看、分享、移动以及任何他们喜欢的内容。越狱用户可以简单地安装 iFile,导航到您的应用目录,播放文件,然后继续他们的一天。

那么,存储用户敏感信息的最佳方式是什么?我应该使用 Coredata 并存储加密信息吗?

【问题讨论】:

  • 根据您想要存储的敏感信息的程度,最好根本不存储它。你想存储什么样的信息?对于少量数据 Keychain 可能会做(AFAIK 它与 JB 设备上的 NSUserDefaults 保护几乎相同),对于某些信息,您可能需要加密整个存储和/或单个数据属性。
  • 用户凭据、用户电子邮件、用户地址等...
  • 看看 Keychain API。
  • 好主意...谢谢!!!
  • UserDefaults 是用来存储用户设置而不是整个应用程序数据,所以如果你想存储一些数据,比如文本文档,你应该使用不同于 UserDefaults 的 plist。

标签: ios core-data plist nsuserdefaults nsdocumentdirectory


【解决方案1】:

您应该看看这个this 文档。虽然没有很多信息,但它仍然是一个很好的起点。此外,您可能会发现从 Apple 挖掘 examples and guides 很有用(您必须登录)。祝你好运!

【讨论】:

    【解决方案2】:

    为了存储用户凭据,我会使用钥匙串(如果服务器端可以接受某种哈希而不是普通密码,这也会有所帮助)。我想说拥有 JB 的用户可能知道他们在做什么并且也可以保护自己,所以我认为使用 JB 比没有它更容易破解 Keychain 并不是什么大问题。

    如果您使用 CoreData,我会使用可转换属性来存储地址等内容(This post 可能会有所帮助)。

    iOS 端的额外保护可以是文件保护属性(如果用户设置了密码)。

    UserDefaults 并不意味着存储敏感信息,因为它基本上是“纯文本”。

    【讨论】:

      【解决方案3】:

      NSUserDefaults vs Sensitive 信息最好存储在 keychain 中。但是如果你不想要 keychain 的特性,你应该避免使用它,比如 -

      1. 卸载您的应用后,钥匙串不会删除信息(键、值)。因此,尽管没有滥用存储在钥匙串中的信息,但请确保您在堆放钥匙串时没有问题。卸载应用后,来自 NSUser 默认值的信息将立即被删除。

      2. 通过 iCloud,钥匙串信息在有权访问凭据的设备之间共享。尽管它们非常适合您的设备,但并非每次用户都在设备上使用相同的应用程序,所以为什么要传递凭据。

      3. 在 MAC 钥匙串访问等设备上会弹出询问权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 2012-07-07
        • 2012-12-26
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多