web-dev-qa-db-fra.com

React Native Asyncstorage est-il sécurisé?

Je souhaite stocker des données sensibles localement dans une application React Native.

Les données sont-elles uniquement disponibles pour l'application qui les a écrites?

32
yogiben

AsyncStorage ne convient pas pour stocker des informations sensibles. Vous pourriez trouver cela utile: https://github.com/oblador/react-native-keychain

Il utilise le magasin de clés Facebook dissimulé/Android pour stocker les données chiffrées dans SharedPreferences (Android) et le trousseau sur iOS. (J'ai co-écrit la lib). Assurez-vous de lire tout le fichier Lisez-moi pour comprendre ce qu’il offre.

28
vonovak

Non, AsyncStorage n'est pas sécurisé pour les données sensibles. AsyncStorage enregistre simplement les données sur des documents stockés sur le disque dur du téléphone. Par conséquent, toute personne ayant accès au système de fichiers du téléphone peut lire ces données. Bien sûr, que cela vous pose problème ou non dépend de ce que vous entendez par «données sensibles».

Au moins sur iOS, il est vrai que les données ne sont disponibles que pour l'application qui les a écrites, en raison de la politique de sandboxing d'Apple. Cela n'empêche pas les iPhones jailbreakés ayant un accès root au système de fichiers d'obtenir ce qu'ils veulent, car AsyncStorage ne crypte aucune de ses données. Mais en général, n'enregistrez pas de données sensibles sur AsyncStorage, pour la même raison, vous ne devez pas coder en dur les données sensibles dans votre code javascript, car il peut être facilement décompilé et lu.

7
Michael Helvey

Pour les applications très sensibles ou les données utilisateur, vous pouvez essayer quelque chose comme https://github.com/oblador/react-native-keychain sur iOS (utilise iOS Keychain) ou https://github.com/ classapp/react-native-sensitive-info pour Android et iOS (utilise la préférence partagée Android et le trousseau iOS).

Les deux d'entre eux sont dotés d'une API très fluide et d'un moyen simple de créer des liens avec react-native link. Ils constituent un moyen plus sûr de conserver les données que vous souhaitez éviter aux regards indiscrets.

4
Aftab

J'ai rencontré le même problème sur un projet sur lequel je travaillais: nous utilisions un wrapper personnalisé pour AsyncStorage, stockions une quantité de données et ensuite nous essayions de récupérer les mêmes données ... et c'était si facile.

Nous résolvons ce problème en utilisant Realm avec l’option de cryptage. C’était une solution plus facile, plus rapide et meilleure que AsyncStorage.

3
XaviMorenoM

Non ce n'est pas sécurisé. Envisagez d'utiliser une bibliothèque telle que https://github.com/oblador/react-native-keychain pour un stockage sécurisé.

Si vous utilisez Expo, vous pouvez utiliser Expo.SecureStore pour chiffrer et stocker en toute sécurité les paires clé-valeur localement sur le périphérique. Documentation: https://docs.expo.io/versions/latest/sdk/securestore

1
pyankoff

J'ai créé un module de stockage sécurisé pour redux-persist qui utilise react-native-keychain pour stocker une clé de chiffrement et utilise CryptoJS pour chiffrer le magasin redux au repos dans AsyncStorage. Vous pouvez trouver le module à: 

Redux-persist-encrypted-async-storage

Son utilisation est discutée dans le readme au lien.

1
Chaudhry Junaid

De la documentation réactive-native - https://facebook.github.io/react-native/docs/asyncstorage.html

AsyncStorage est un système de stockage clé-valeur persistant, asynchrone, non crypté, global pour l'application.

Ce n'est pas sécurisé car il stocke les paires clé-valeur sous forme non chiffrée sur le périphérique.

Il utilisait un trousseau pour iOS et KeyStore pour Android pour stocker des données en toute sécurité.

0
pradeep1991singh