只是深入研究 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 笔记本电脑并提取文档目录并查看文档目录下保存的所有内容。