我正在构建一个React本机应用程序,需要保存一些敏感数据,如令牌和刷新令牌。显而易见的解决方案是使用异步存储保存这些信息。问题在于异步存储的安全级别。
AsyncStorage提供了一种本地存储令牌和数据的方法。在某些方面,它可以与LocalStorage选项相比较。在完整生产应用程序中,建议不要直接访问AsyncStorage,而是使用抽象层,因为AsyncStorage与使用同一浏览器的其他应用程序共享,因此从存储中删除所有项目可能会影响相邻应用程序的功能。
https://auth0.com/blog/adding-authentication-to-react-native-using-jwt/
在本机应用程序中,我会在iOS
中选择Keychain
,并在Android
中的私有模式中选择共享首选项
。
对于我在React Native提供的留档中读到的内容:
在iOS上,异步存储由本机代码支持,本机代码将小值存储在序列化字典中,将大值存储在单独的文件中。在Android上,AsyncStorage将根据可用内容使用RocksDB或SQLite。
https://facebook.github.io/react-native/docs/asyncstorage.html
他们从不谈论数据的安全性。
这是最好的解决方案创建一个模块为Android
(使用共享首选项
在私人模式)和另一个为iOS
(使用Keychain)保存明智的数据?或者使用提供的Asyncstore
方法是安全的?
如果有人需要对数据进行加密的附加步骤,您可能需要查看以下内容:https://github.com/oblador/react-native-keychain
它在内部使用facebook。
AsyncStorage
将键值对保存为Documents目录中的纯文本JSON文件。它不加密其内容。
这是一个安全问题(至少在iOS上),因为有权访问该设备的攻击者可能会获得沙箱内容的转储,并轻松提取通过异步存储保存的任何数据。
这在异步存储文档中没有明确说明。js,但现在是:https://github.com/facebook/react-native/pull/8809
另见:https://stackoverflow.com/a/38398114/1072846
只要深入研究React Native代码,我就找到了答案。
Android系统
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将您的数据库存储在关联应用程序的私有磁盘空间中。您的数据是安全的,因为默认情况下,其他应用程序无法访问该区域。
来源
网间网html" target="_blank">操作系统
在iOS中,AsyncStorage
值保存在序列化字典文件中。这些文件保存在应用程序NSDocumentDirectory
中。在iOS中,所有应用程序都生活在自己的沙箱中,因此一个应用程序的所有文件都是安全的,其他应用程序无法访问这些文件。
iOS中处理Asyncstore
模块的代码可以在这里找到:https://github.com/facebook/react-native/blob/master/React/Modules/RCTAsyncLocalStorage.m
正如我们在这里看到的,用于存储由AsyncStore
保存的值的文件保存在NSDocumentDirectory
下(在应用程序沙盒环境中)。
每个应用程序都是一座孤岛iOS应用程序与文件系统的交互主要限于应用程序沙盒内的目录。在安装新应用期间,安装程序会为应用创建多个容器。每个容器都有特定的角色。bundle容器保存应用的bundle,而数据容器保存应用程序和用户的数据。数据容器被进一步划分为多个目录,应用可以使用这些目录对其数据进行排序和组织。应用程序还可以在运行时请求访问其他容器,例如iCloud容器。
来源
结论
使用AsyncStorage
保存用户令牌是安全的,因为它们保存在安全上下文中。
请注意,这仅适用于没有root的Android设备和没有越狱的iOS设备。还请注意,如果攻击者具有对设备的物理访问权限,并且设备未受到保护,则。他可以将设备连接到mac笔记本电脑,提取文档目录,并查看保存在文档目录下的所有内容。
我的PHP网站有以下内容: > 启用SSL Cookie: 传输时的密码SHA512,然后是password_hash(),最后是PASSWORD_BCRYPT 我现在希望使用AES_Encrypt函数加密敏感数据,方法是将用于加密和解密的$key存储在webroot目录之外。 这可能会存储病人的数据,我所拥有的是否足够安全? 问题: 当您插入/更新时,您是如何清理输入的?如果您使用的是准备好的语
随着在线应用程序日复一日地涌入互联网,并非所有应用程序都受到保护。许多Web应用程序无法正确保护敏感用户数据,如信用卡信息/银行帐户信息/身份验证凭据。黑客可能最终窃取这些受到弱保护的数据,以进行信用卡欺诈,身份盗窃或其他犯罪。 下面我们来了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 谁可以访问您的敏感数据和任何数据备份。有外部和内部威胁。 攻击者的方法 - 做中
问题内容: 我需要在内存中短时间存储用户密码。我该怎么做却又不会在核心转储或回溯中意外泄露此类信息?有没有一种方法可以将值标记为“敏感”,因此调试器不会将其保存在任何地方? 问题答案: 编辑 我已经提出了使用ctypes(反过来使用C)零内存的解决方案。 我不保证此代码的安全性。经过测试可在x86和CPython 2.6.2上运行。更长的文章在这里。 在Python中解密和加密将无法进行。字符串和
我正在为我工作的一家公司申请工作。我有它来防止SQL注入和一些XSS技术。我的主要问题是保护敏感信息的安全,比如SSN和地址,因为公司需要它来为推销员制作1099表格。 我不知道如何做这部分,但是我应该加密所有内容,然后在它进入MySQL数据库时对其进行解密吗?
问题内容: 在理解Java JDBC ResultSet Types时,有两种滚动类型TYPE_SCROLL_SENSITIVE和TYPE_SCROLL_INSENSITIVE,我知道。但是当我进行实际实施时,我没有看到效果。下面是代码: 当程序到达LINE 39时,我从后端更新了数据库以进行记录。对于TYPE_SCROLL_INSENSITIVE,它不显示应执行的更新记录,但对于TYPE_SCR
一、本功能说明 对网站内容进行过滤屏蔽,以免违反互联网相关政策而导致网站被关闭 二、子功能导航 1.添加敏感词 2.修改敏感词 2.删除敏感词 三、功能详解 1.添加敏感词 1).如何进入本功能 导航栏 选择扩展 -> 菜单栏 选择 敏感词管理-> 顶部添加敏感词或者批量导入 2).界面解释 a.)点击添加敏感词后显示如下界面 界面详述 1). 敏感词: 请填写您要屏蔽的任何词语 2). 替换词: