2016-11-20 4 views
2

In meiner Anwendung habe ich ein Fragment, wo der Benutzer ein Passwort eingibt. Dieses Fragment kann sich drehen. Beim Drehen möchte ich, dass die meisten Textfelder mit onSaveInstanceState und onActivityCreated gespeichert und wiederhergestellt werden. Wenn ich ein Passwort auf der Festplatte speichere, verwende ich normalerweise einen Einweg-Hash, um die Menge an Schaden zu begrenzen, die ausgeführt werden kann, wenn diese Information kompromittiert wird. Wenn das Passwort jedoch nur zur Hälfte geschrieben ist, kann ich keinen Oneway-Hash erstellen ... es muss wiederherstellbar sein.Was tun mit einer Passworteingabe auf dem Bildschirm drehen

Also meine Frage: setzt ein Passwort in eine Bundle sicher? Oder soll ich einfach den Wert zerstören, wenn das Fragment zerstört wird? Stellt der folgende Code ein Sicherheitsrisiko für meine Benutzer dar?

public override void OnSaveInstanceState(Bundle savedInstanceState) 
{ 
    base.OnSaveInstanceState(savedInstanceState); 
    savedInstanceState.PutString("passEditText", _passEditText.Text); 
    ... 
} 

public override void OnActivityCreated(Bundle savedInstanceState) 
{ 
    base.OnActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) 
    { 
     _passEditText.Text = savedInstanceState.GetString("passEditText", ""); 
     ... 
    } 
} 
+0

Ich würde für einen savedInstanceState gehen. Es wird nur im Speicher gespeichert und das Gleiche gilt für ein Passwortfeld. – rastik

+1

Fragmente haben einen 'SaveFragmentInstanceState' ... so weit sicher? es ist ** as ** sicher (oder unsicher) wie ein beliebiges Objekt im Speicher, einschließlich des 'EditText', der das partielle/vollständige Passwort ist. Serialisieren Sie den Inhalt des Pakets nicht auf der Festplatte oder platzieren Sie sichere Informationen mit einem 'PersistableBundle' .... – SushiHangover

+0

@SushiHangover Okay, perfekt! Fügen Sie das als Antwort hinzu und ich gebe Ihnen das Häkchen! – flakes

Antwort

1

Fragments haben eine SaveFragmentInstanceState Methode.

Speichert den aktuellen Instanzstatus des angegebenen Fragments. Dies kann später verwendet werden, wenn eine neue Instanz des Fragments erstellt und zum Fragmentmanager hinzugefügt wird, damit es sich selbst erstellt, um dem aktuellen Status zu entsprechen, der hier zurückgegeben wird.

Ref: Xamarin: SaveFragmentInstanceState Ref: Android: saveFragmentInstanceState

sicher?

Es ist so sicher, oder unsicher, wie jedes Objekt im Speicher, einschließlich der EditText, die die Teil-/Voll Passwort in sich hat. Serialisieren Sie den Inhalt des Pakets nicht auf dem Datenträger oder platzieren Sie keine sicheren Informationen mit einer PersistableBundle als speichern Sie es ...