Enregistrer les données sensibles de Réagir Natif
Je suis la construction d'une Réagir application Native et j'ai besoin de sauvegarder certaines données sensibles comme un jeton et un jeton d'actualisation. La solution la plus évidente consiste à enregistrer les informations à l'aide de AsyncStorage. Le problème est le niveau de sécurité de l'AsyncStorage.
AsyncStorage fournit un moyen de stocker localement des jetons et des données. Il peut
être, à certains égards, par rapport à un LocalStorage option. En plein
les applications de production, il est recommandé de ne pas accéder AsyncStorage
directement, mais au lieu de cela, utiliser une couche d'abstraction, comme AsyncStorage est
partagé avec d'autres applications utilisant le même navigateur, et donc une
mauvais conceieved suppression de tous les éléments de stockage, pourrait nuire à la
fonctionnement des voisins des apps.
https://auth0.com/blog/adding-authentication-to-react-native-using-jwt/
Dans une application native, je voudrais aller Keychain
dans iOS
et Shared Preferences
dans mode privé dans Android
.
Pour ce que j'ai lu dans la documentation fournie par Réagir Natif:
Sur iOS, AsyncStorage est soutenu par du code natif qui stocke les petites valeurs
dans un sérialisé dictionnaire et de plus grandes valeurs dans des fichiers séparés. Sur
Android, AsyncStorage utilisera soit RocksDB ou SQLite basé sur ce que
est disponible.
https://facebook.github.io/react-native/docs/asyncstorage.html
Ils ne parlent jamais de la sécurité de ces données.
C'est la meilleure solution de créer un module pour Android
(qui utilise Shared Preferences
dans mode privé) et un autre pour iOS
(qui utilise Trousseau) pour enregistrer les données sensibles? Ou il est sécuritaire d'utiliser la AsyncStorage
méthodes fournies?
- Ce que vous recherchez, il est répondu dans ce post: stackoverflow.com/questions/37563224/...
- Cette réponse ne fait aucune hypothèse quant à la sécurité de la
AsyncStorage
. - Vous pouvez prendre un coup d'oeil à ce post: stackoverflow.com/questions/45547657/...
- Pedro et Julien, arrêter de les relier à d'autres postes. Qui est ennuyeux. Si il y avait des informations utiles, puis de la publier ici. De cette façon, les utilisateurs qui se retrouvent ici via la recherche Google n'est pas à garder le chaînage en postes supplémentaires.
Vous devez vous connecter pour publier un commentaire.
Juste de creuser dans le Réagir en code Natif, j'ai trouvé la réponse.
Android
La
React Native
AsyncStorage
module de mise en œuvre est basée surSQLiteOpenHelper
.Le paquet, où toutes les classes de données sont traitées: https://github.com/facebook/react-native/tree/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage
La classe avec les instructions pour créer la base de données: https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage/ReactDatabaseSupplier.java
Par l'Android documentation, bases de données créées par l'application sont enregistrés dans le privé, l'espace disque associé de l'application, de sorte qu'il est sécurisé.
Source
iOS
Dans iOS la
AsyncStorage
valeurs sont enregistrées dans sérialisé fichiers de dictionnaire. Ces fichiers sont enregistrés dans l'applicationNSDocumentDirectory
. Dans iOS toutes les applications vivre dans leur propre bac à sable, de sorte que tous les fichiers d'une application sont sécurisés, ils ne sont pas accessibles par les autres applications.Le code de iOS qui gère le
AsyncStorage
module peut être trouvé ici: https://github.com/facebook/react-native/blob/master/React/Modules/RCTAsyncLocalStorage.mEt comme nous pouvons le voir ici les fichiers utilisés pour stocker les valeurs enregistrées par le
AsyncStorage
sont enregistrés sous leNSDocumentDirectory
(à l'intérieur de la sandbox de l'application de l'environnement).Source
Conclusion
Il est sûr à utiliser
AsyncStorage
pour sauvegarder des jetons, depuis qu'ils sont enregistrés sous un cadre sécurisé.Veuillez noter que ceci est vrai seulement pour les appareils Android sans racine et pour les appareils iOS sans jailbreak. Veuillez aussi noter que si l'attaquant a accès physique à l'appareil et que l'appareil n'est pas protégé. Il peut connecter l'appareil à l'ordinateur portable mac et extraire les documents répertoire et de voir tout le contenu enregistré dans le répertoire documents.
AsyncStorage
enregistre les paires clé-valeur en tant que texte brut fichier JSON dans le répertoire Documents. Il ne permet pas de chiffrer son contenu.C'est un problème de sécurité (au moins sur iOS) car il est possible pour un attaquant ayant accès à l'appareil pour obtenir une image du contenu du bac à sable et trivialement extraire toutes les données enregistrées par
AsyncStorage
.Cette habitude de ne pas être clairement indiqué dans les docs pour AsyncStorage.js mais il est maintenant:
https://github.com/facebook/react-native/pull/8809
Voir aussi: https://stackoverflow.com/a/38398114/1072846
Si quelqu'un veut l'étape supplémentaire d'avoir les données chiffrées, vous pouvez jeter un oeil à ceci: https://github.com/oblador/react-native-keychain
Il utilise facebook cacher en interne.
J'ai vraiment vous recommander d'utiliser une bibliothèque comme réagir-native-trousseau pour stocker des données privées dans réagir indigènes
Pour Android API de niveau:
Vous pouvez l'utiliser comme ça: