如何确保从我的应用程序发送到数据库的数据的完整性?

问题描述

我目前正在使用 Swift 创建一个 iOS 应用程序。对于数据库,我使用 Firebase 实时数据库,我在其中存储有关用户的信息以及用户发送给我的请求。 数据库中的数据没有损坏对我的应用程序非常重要。 为此,我禁用了数据持久性,这样我就不必在设备上本地存储请求。但是我想知道是否有可能用户在我的应用程序执行期间直接修改变量的值并且仍然发送错误的请求。 例如,用户有一定数量的硬币,他是否可以访问应用程序的内存,修改硬币数量,返回应用程序并发送错误请求,而无需自己修改。 如果是这种情况,那么禁用数据持久性真的更安全还是这是一种误解? 此外,禁用对越狱设备的访问是否可以解决我的问题?因为我听说普通用户仍然可以在发送请求备份之前对其进行修改

总而言之,我想了解我的想法是否正确?阻止请求在本地保存真的有用吗,否则恶意用户将能够在执行过程中直接修改变量的值并且无需越狱?

我还想找到一个解决方案,使我的数据库中的数据可靠。

感谢您的关注:)

PS:我还设置了数据库的安全规则,只有登录用户才能在他的区域内读写。

解决方法

您应该将服务器端数据视为唯一的真实来源,并将来自客户端的所有数据视为可疑数据。

为了保护您的服务器端数据,您应该实施 Firebase 的服务器端 security rules。有了这些你可以validate data structuresensure all read/writes are authorized

如果您遵循上述两条规则,禁用客户端持久性或写入队列,就像您之前的问题一样,并不是那么有用,也没有必要。


作为额外的安全层,您可以启用 Firebase 的新 App Check,它与您设备上所谓的证明提供程序(iOS 上的 DeviceCheck)配合使用以检测篡改,然后您只允许来自未损坏的设备。

通过结合应用检查和安全规则,您可以获得广泛的滥用保护,以及对数据结构和谁可以访问哪些数据的细粒度控制。