在 React Native 中保存敏感数据

2023-12-04

我正在构建一个 React Native 应用程序,我需要保存一些敏感数据,例如令牌和刷新令牌。显而易见的解决方案是使用保存该信息异步存储。问题在于 AsyncStorage 的安全级别。

AsyncStorage 提供了一种本地存储令牌和数据的方法。它可以 在某些方面,与 LocalStorage 选项相比。在全 生产应用,建议不要访问AsyncStorage 直接使用,而是使用抽象层,就像 AsyncStorage 一样 与使用同一浏览器的其他应用程序共享,因此 考虑不周地从仓库中取出所有物品可能会损害 相邻应用程序的功能。

https://auth0.com/blog/adding-authentication-to-react-native-using-jwt/

在本机应用程序中,我会选择Keychain in iOS and Shared Preferences in 私人模式 in Android.

对于我在 React Native 提供的文档中读到的内容:

在 iOS 上,AsyncStorage 由存储小值的本机代码支持 在序列化字典中,较大的值在单独的文件中。在 Android,AsyncStorage 将根据情况使用 RocksDB 或 SQLite 可用。

https://facebook.github.io/react-native/docs/asyncstorage.html

他们从不谈论该数据的安全性。

这是最好的解决方案创建一个模块Android(使用Shared Preferences in 私人模式)和另一个iOS(使用Keychain)保存敏感数据?或者可以安全地使用AsyncStorage提供方法?


只是深入研究 React Native 代码,我找到了答案。

Android

The React Native AsyncStorage模块实现基于SQLiteOpenHelper。 处理所有数据类的包:https://github.com/facebook/react-native/tree/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage

包含创建数据库说明的类:https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage/ReactDatabaseSupplier.java

根据 Android 文档,应用程序创建的数据库保存在关联应用程序的专用磁盘空间中,因此是安全的。

就像您保存在设备内部存储器上的文件一样, Android 将您的数据库存储在关联的专用磁盘空间中 应用。您的数据是安全的,因为默认情况下该区域不是 可供其他应用程序访问。

Source

iOS

在 iOS 中AsyncStorage值保存在序列化的字典文件中。这些文件保存在应用程序中NSDocumentDirectory。在 iOS 中,所有应用程序都位于他们自己的沙箱,因此一个应用程序的所有文件都是安全的,其他应用程序无法访问它们。

iOS 中处理的代码AsyncStorage模块可以在这里找到:https://github.com/facebook/react-native/blob/master/React/Modules/RCTAsyncLocalStorage.m

正如我们所看到的here用于存储保存的值的文件AsyncStorage保存在NSDocumentDirectory(在应用程序沙箱环境内)。

每个应用程序都是一座孤岛 iOS 应用程序与文件系统的交互 主要限于应用程序沙箱内的目录。期间 安装新应用程序时,安装程​​序会创建许多 应用程序的容器。每个容器都有特定的角色。捆绑包 容器保存应用程序的包,而数据容器保存 应用程序和用户的数据。数据容器是 进一步分为应用程序可以使用的多个目录 对其数据进行排序和组织。该应用程序还可能请求访问 运行时的其他容器(例如 iCloud 容器)。

Source

结论

使用安全AsyncStorage保存用户令牌,因为它们保存在安全上下文下。

请注意,这仅适用于没有root对于没有的 iOS 设备越狱。另请注意,如果攻击者有物理访问到设备并且设备不受保护。他可以将设备连接到 Mac 笔记本电脑并提取文档目录并查看文档目录下保存的所有内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React Native 中保存敏感数据 的相关文章

随机推荐