在手机上本地存储数据是否安全?

时间:2021-06-03 12:46:24

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

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

我理解错了吗?

谢谢:)

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

相关问题