【问题标题】:Is it safe to store data locally on a phone? [closed]在手机上本地存储数据是否安全? [关闭]
【发布时间】:2021-08-21 14:14:57
【问题描述】:

在我的应用程序中,当用户注销或关闭应用程序时,我会更新用户数据。 问题是当他关闭应用程序时,操作系统会停止应用程序的所有进程,所以我无法在 Firebase 上进行写作。 我想做的是将这些数据本地保存在设备上,当用户重新登录时,进行更新。 我打算通过用户默认值保存它们,但我认为如果用户有越狱手机,理论上他们可以访问该内存区域并因此更改值。

我是不是搞错了?

谢谢:)

【问题讨论】:

    标签: ios swift security firebase-realtime-database jailbreak


    【解决方案1】:

    您是对的,通常您的应用程序的沙盒受到保护,但超级用户可以访问它并读取数据。在这种情况下,一种解决方案是防止在 root 或越狱的手机上启动应用程序。有一些像 one 这样的库来检测越狱手机。有时最好停止应用程序并启动一个弹出窗口,解释为什么应用程序由于网络安全规则而无法在此手机上运行。

    但请记住,这样做会失去一些用户。

    【讨论】:

    • 如果备份了数据,用户可以修改备份然后恢复,完全无需越狱。如果数据完整性是必不可少的,那么服务器端是唯一的选择。
    • 好的,这意味着所有本地存储的数据都可能已损坏
    【解决方案2】:

    对于您的主要问题,当用户离开应用程序时写入数据,这有几个得到很好支持的解决方案。这是beginBackgroundTask(expirationHandler:) 的典型示例。每当您开始 Firebase 更新时,请致电 beginBackgroundTask,每当您完成更新时,请致电 endBackgroundTask。这将告诉操作系统您当前正在执行的操作可能会在被终止之前获得更多时间。您应该期待大约 30 秒到一分钟的时间。 (过去大约需要 3 分钟,但在较新的操作系统版本中已收紧。)对于大多数更新来说,这应该是足够的时间。

    如果你直接使用 URLSession,你也可以使用后台任务。有关详细信息,请参阅Downloading Files in the Background。这可用于发送数据,而不仅仅是传输文件。它具有在当前离线时排队操作的主要优势,并且操作系统将在可能的情况下执行传输,即使您的应用程序不再运行。也就是说,这一切实施起来都比较复杂,而且对于这类问题来说可能有点矫枉过正。

    也就是说,如果您将访问令牌存储在程序中的任何位置(包括内存中),对您的应用进行逆向工程的用户始终可以直接连接到 Firebase 并发送他们想要的任何内容。无论您将其存储在 UserDefaults 中、文件中还是仅存储在内存中,都不会真正改变这一点。另外,上次我检查过,如果您使用他们的 SDK,Firebase 不支持证书固定,因此用户可以使用代理重写您的数据包,甚至无需越狱手机。

    【讨论】:

      【解决方案3】:

      我认为将用户数据存储在云端会更好。

      【讨论】:

      • Firebase 是一个云存储系统。问题是关于在用户关闭应用程序之前没有足够的时间将数据写入 Firebase 的情况。
      猜你喜欢
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多