2016-08-25 34 views
24

我想将敏感数据本地存储在React Native应用程序中。React Native的异步存储是否安全?

数据是否仅适用于编写它的应用程序?

+0

你可以看看这篇文章:https://stackoverflow.com/questions/45547657/what-is-the-best-way-to-store-private-data-in-react-native –

回答

4

不,对于敏感数据,AsyncStorage不安全。 AsyncStorage只是将数据保存到手机硬盘上的文档中,因此任何有权访问手机文件系统的人都可以读取该数据。当然,这对你来说是否有问题取决于你所说的“感性数据”的含义。

至少在iOS上,由于Apple的沙盒策略,数据只能在写入它的应用程序中使用。这并不能阻止对文件系统具有root权限的越狱iPhone获取他们想要的任何东西,因为AsyncStorage不会对其任何数据进行加密。但一般来说,不要将敏感数据保存到AsyncStorage中,出于同样的原因,您不应在JavaScript代码中对敏感数据进行硬编码,因为它可以轻松地反编译和读取。

+0

还有什么其他存储选项存在于iOS?有没有像你可以使用的内部数据库? –

+0

关于此内容https://stackoverflow.com/a/39112472/4637196 –

3

我在一个正在处理的项目中遇到了同样的问题,我们使用AsyncStorage的自定义包装器,存储了一些数据,然后我们尝试检索相同的数据......并且它非常简单。

我们通过使用带加密选项的Realm来解决这个问题,它比AsyncStorage更容易,更快,更好的解决方案。

+0

你是如何存储Realm密钥的?我的信念是只能存储硬编码或本地密钥。 – yogiben

+0

我只是想要我的信息被加密,这是一个测试项目,所以我离开它如下: 'let eKey = new Int8Array(64); //使用安全密钥傀儡 'let realm = new Realm({... encryptionKey:eKey});' – XaviMorenoM

+1

您可能需要 1.在应用第一次启动时生成随机密钥。 2.使用诸如react-native-keychain之类的东西将其保存到本机钥匙串。 3.每当你的应用程序启动后,从钥匙扣中获取该密钥 4.使用密钥获得你的领域实例 注意:如果钥匙串被清除,那么你需要吹走领域db。 – duhseekoh

13

AsyncStorage不适合存储敏感信息。您可能会觉得这很有用:https://github.com/oblador/react-native-keychain

它使用facebook conceal/android keystore将加密数据存储到SharedPreferences(Android)和iOS上的钥匙串。 (我共同撰写了这个lib)。请务必阅读整个自述文件以了解它提供的内容。

+0

Android上的Base64不是安全的数据存储方式 – odemolliens

+1

@odemolliens您可能没有注意到保存的base64 _encoded_字符串已被*加密*。 – vonovak

+0

我再次阅读源代码,你是对的。但是,如果Base64已经被加密,在Base64中编码有什么好处?欢呼 – odemolliens

相关问题