Speichern Sie sensible Daten in React Native

Ich baue eine React Native Anwendung und ich muss einige sensible Daten wie ein Token und ein Refresh-Token speichern. Die offensichtliche Lösung besteht darin, diese Informationen mit AsyncStorage zu speichern. Das Problem ist die Sicherheitsstufe des AsyncStorage.

AsyncStorage bietet eine Möglichkeit, Token und Daten lokal zu speichern. Es kann in gewisser Weise im Vergleich zu einer LocalStorage-Option sein. In Vollproduktionsanwendungen empfiehlt es sich, nicht direkt auf AsyncStorage zuzugreifen, sondern stattdessen eine Abstraktionsschicht zu verwenden, da AsyncStorage mit anderen Apps mit demselben Browser geteilt wird und somit ein schlecht konzipiertes Entfernen aller Objekte aus dem Speicherplatz beeinträchtigt werden kann Funktionieren von benachbarten Apps.

  • Das Symbol NameValuePair kann nicht aufgelöst werden
  • Android ICS und MJPEG mit AsyncTask
  • Wie kann ich einen Offline-Geocoder für eine einzelne Stadt mit OSM-Daten in Android implementieren?
  • Firebase-Benachrichtigung über Kind hinzugefügt / geändert
  • Was ist ein Ersatz für veraltete MODE_WORLD_READABLE SharedPreferences in Android?
  • Wie kann ich den Standortdialog wie Google Maps aktivieren?
  • Https://auth0.com/blog/adding-authentication-to-react-native-using-jwt/

    In einer nativen App würde ich für Keychain in iOS und Shared Preferences im privaten Modus in Android .

    Für was ich in der Dokumentation von React Native gelesen habe:

    Auf iOS wird AsyncStorage durch nativen Code unterstützt, der kleine Werte in einem serialisierten Wörterbuch und größere Werte in separaten Dateien speichert. Auf Android wird AsyncStorage entweder RocksDB oder SQLite verwenden, basierend auf dem, was verfügbar ist.

    Https://facebook.github.io/react-native/docs/asyncstorage.html

    Sie sprechen nie über die Sicherheit dieser Daten.

    Es ist die beste Lösung, ein Modul für Android erstellen (das freigegebene Shared Preferences im privaten Modus verwendet ) und ein anderes für iOS (das benutzt Keychain ), um die vernünftigen Daten zu speichern? Oder es ist sicher, die AsyncStorage Methoden zur Verfügung zu stellen?

  • Wie kann ich den Standardkalender von Android OS ersetzen?
  • Android-Entwicklung - Alle Google + SDK oder Codebeispiel?
  • Automatisieren Sie den Import von Java (Android) -Projekten in den Eclipse-Arbeitsbereich über Kommandozeilen
  • Wie bekomme ich meine TextView Breite die Hälfte ihrer Eltern?
  • RecyclerView blättert nach oben auf notifyDataSetChanged im Chat-Bildschirm
  • Cordova Ionic: Enable Android Emoji Soft-Tastatur
  • 3 Solutions collect form web for “Speichern Sie sensible Daten in React Native”

    Nur in den React Native Code graben, fand ich die Antwort.

    Android

    Die React Native AsyncStorage Modul Implementierung basiert auf SQLiteOpenHelper . Das Paket, in dem alle Datenklassen behandelt werden: https://github.com/facebook/react-native/tree/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage

    Die Klasse mit den Anweisungen zum Erstellen der Datenbank: https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage/ReactDatabaseSupplier.java

    Durch die Android-Dokumentation werden die von der Anwendung erstellten Datenbanken auf dem privaten Speicherplatz gespeichert, der die zugehörige Anwendung enthält. So ist es sicher.

    Genau wie Dateien, die Sie auf dem internen Speicher des Geräts speichern, speichert Android Ihre Datenbank auf dem privaten Speicherplatz, der die zugehörige Anwendung enthält. Ihre Daten sind sicher, da dieser Bereich standardmäßig nicht für andere Anwendungen zugänglich ist.

    Quelle

    IOS

    In iOS werden die AsyncStorage Werte in serialisierten Wörterbuchdateien gespeichert. Diese Dateien werden in der Anwendung NSDocumentDirectory . In iOS alle Anwendungen leben in ihrer eigenen Sandbox , so dass alle Dateien von einer Anwendung gesichert sind, können sie nicht von den anderen Anwendungen zugegriffen werden.

    Der Code in iOS, der das AsyncStorage Modul verarbeitet, finden Sie hier: https://github.com/facebook/react-native/blob/master/React/Modules/RCTAsyncLocalStorage.m

    Und wie wir hier sehen können, werden die Dateien, die zum Speichern der von der AsyncStorage gespeicherten Werte AsyncStorage werden, unter dem NSDocumentDirectory (innerhalb der Application Sandbox-Umgebung) gespeichert.

    Jede App ist eine Insel Die Interaktionen der iOS App mit dem Dateisystem sind vor allem auf die Verzeichnisse in der Sandbox der App beschränkt. Während der Installation einer neuen App erstellt der Installateur eine Anzahl von Containern für die App. Jeder Container hat eine bestimmte Rolle. Der Bündelcontainer hält das Bündel der App, während der Datencontainer Daten sowohl für die Anwendung als auch für den Benutzer enthält. Der Datencontainer ist weiter in eine Reihe von Verzeichnissen unterteilt, die die App verwenden kann, um ihre Daten zu sortieren und zu organisieren. Die App kann auch den Zugriff auf zusätzliche Container – zum Beispiel den iCloud Container – zur Laufzeit anfordern.

    Quelle

    Schlussfolgerung

    Es ist sicher, AsyncStorage zu verwenden, um Benutzer-Token zu speichern, da sie unter einem sicheren Kontext gespeichert werden.

    Bitte beachten Sie, dass dies nur für Android-Geräte ohne Root und für iOS-Geräte ohne Jailbreak gilt . Bitte beachten Sie auch, dass, wenn der Angreifer physischen Zugriff auf das Gerät hat und das Gerät nicht geschützt ist. Er kann das Gerät mit dem Mac-Laptop verbinden und das Dokumentenverzeichnis extrahieren und alle im Dokumentverzeichnis gespeicherten Inhalte sehen.

    AsyncStorage speichert Schlüsselwertpaare als Klartext-JSON-Datei im Dokumentverzeichnis. Es verschlüsselt seinen Inhalt nicht .

    Dies ist ein Sicherheitsproblem (zumindest auf iOS), weil es für einen Angreifer mit Zugriff auf das Gerät möglich ist, um einen Dump des Inhalts der Sandbox zu erhalten und triviale Daten zu extrahieren, die über AsyncStorage gespeichert AsyncStorage .

    Dies wurde in den docs für AsyncStorage.js nicht eindeutig angegeben, aber es ist jetzt: https://github.com/facebook/react-native/pull/8809

    Siehe auch: https://stackoverflow.com/a/38398114/1072846

    Wenn jemand den zusätzlichen Schritt hat, die Daten verschlüsselt zu haben, möchtest du das bitte betrachten: https://github.com/oblador/react-native-keychain

    Es benutzt facebook verborgen intern.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.