2016-07-15 11 views
0

Ich möchte die Anmeldeinformationen eines Benutzers (d. H. Benutzername und Passwort) in meiner React Native App beibehalten. Sollte ich AsyncStorage verwenden?Ist AsyncStorage sicher?

Mit anderen Worten, ich möchte wissen, ob und wie AsyncStorage schützt seinen Inhalt. Die docs sind still darüber.

(Ich verwende RN v0.28)

+0

Um vertrauliche Informationen zu speichern, können Sie einen Blick auf diese https://stackoverflow.com/a/45550361/7618742 werfen –

Antwort

1

NO (zumindest auf IOS, RN v0.28)

AsyncStorage speichert Schlüssel-Wert-Paare als Klartext JSON Datei in den Dokumenten Verzeichnis.

Wenn Sie es im iOS Simulator ausführen, können Sie den Inhalt auf ~/Library/Developer/CoreSimulator/Devices

enter image description here

finden sollte offensichtlich gewesen von der source code for RCTAsyncLocalStorage

+0

Dies scheint nur ein Problem für jailbroken iOS-Geräte sein. http://stackoverflow.com/a/39112472/2669591 – DylanVann

+0

diese Antwort ist absolut falsch. das oben genannte geschieht auf nicht-jailbroken Geräten. – Eric

+0

Es ist nur ein Problem, wenn das Gerät im Jailbreak ist oder der Angreifer Zugriff auf das Gerät hat und das Gerät nicht geschützt ist. Andere Anwendungen können nicht ohne Jailbreak auf diese Informationen zugreifen. Ich habe die Antwort aktualisiert. –

0

Sie sollten NIE den Benutzernamen speichern und das Passwort im Klartext in Client-Anwendungen. Bitte beachten Sie, nie sensible Daten im Klartext speichern. Sie sollten ein Token verwenden, um den Benutzer zu authentifizieren.

In Bezug auf die Sicherheit der AsyncStorage lesen Sie diese answer. TL; DR Die Daten sind sicher, es sei denn, der Angreifer hat Zugriff auf das Gerät oder das Gerät ist gerootet (Android)/Jailbroken (iOS). Die Daten sind nicht verschlüsselt. Bei einem Root- oder physischen Zugriff auf das Gerät (und das Gerät ist nicht geschützt) ist es möglich, auf diese Daten zuzugreifen.

+0

gibt es eine bessere Möglichkeit, Dinge wie dauerhafte Benutzeranmeldung zu tun? benutze einfach ein Token? Oder gibt es eine andere reaktive native Funktion, die für diesen Anwendungsfall verwendet werden sollte? Vielen Dank. – jakeatwork

+0

AFAIK, die beste Lösung ist immer für ein widerrufliches Token. –

1

Ist AsyncStorage sicher?

Nein AsyncStorage ist nicht sicher, die docs sagt:

AsyncStorage ist ein einfaches, unverschlüsselt, asynchron, persistent, Schlüssel-Wert-Speichersystem, das mit dem App global ist. Es sollte anstelle von LocalStorage verwendet werden.

Zum Speichern von sicheren Informationen über die native Seite, ich empfehlen Sie wirklich react-native-keychain mit react-native

Für iOS es Capabilities Keychain Teilen

Für Android es verwenden, verwenden zu verwenden:

  • API Level 16-22 verwenden Facebook Conceal
  • API-Level 23 + verwenden Android Keystore

Dies ist ein einfaches Beispiel:

// Generic Password, service argument optional 
Keychain 
    .setGenericPassword(username, password) 
    .then(function() { 
    console.log('Credentials saved successfully!'); 
    }); 

// service argument optional 
Keychain 
    .getGenericPassword() 
    .then(function(credentials) { 
    console.log('Credentials successfully loaded for user ' + credentials.username); 
    }).catch(function(error) { 
    console.log('Keychain couldn\'t be accessed! Maybe no value set?', error); 
    }); 
1

Wenn Sie Expo sdk verwenden, können Sie SecureStore für sensible Daten verwenden können.