2016-11-20 15 views
2

私のアプリケーションでは、ユーザーがパスワードを入力する部分があります。この断片は回転することができます。 rotateでは、ほとんどのテキストフィールドをonSaveInstanceStateonActivityCreatedを使って保存して復元します。通常、パスワードをディスクに保存するときは、片方向のハッシュを使用して、この情報が侵害された場合に実行できるダメージの量を制限します。しかし、パスワードが半分しか書かれていない場合、私は片方向のハッシュはできません。復旧可能である必要があります。画面上でのパスワード入力の処理について

私の質問:パスワードをBundleに入れても安全ですか?または、フラグメントが破棄された場合、単に値を破棄する必要がありますか?次のコードはユーザーのセキュリティ上のリスクですか?

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

私はsavedInstanceStateに行きます。メモリにのみ保存され、パスワードフィールドにも同じことが適用されます。 – rastik

+1

フラグメントには安全な限りSaveFragmentInstanceStateがありますか?部分的/完全なパスワードである 'EditText'を含むメモリ内の任意のオブジェクトと同様に安全である(または安全でない)**です。バンドルの内容をディスクにシリアル化したり、 "PersistableBundle"で安全な情報を配置したりしないでください。 – SushiHangover

+0

@SushiHangover、完璧!それを答えとして加えて、私はあなたにチェックマークをつけます! – flakes

答えて

1

Fragmentsは、SaveFragmentInstanceStateの方法を有する。

指定されたフラグメントの現在のインスタンス状態を保存します。これは後で、フラグメントの新しいインスタンスを作成し、それをフラグメントマネージャに追加して、ここで返された現在の状態と一致するように作成するときに使用できます。

参考:Xamarin:SaveFragmentInstanceState 参考:アンドロイド:saveFragmentInstanceState

セキュアな?

それは、その中に部分的/完全なパスワードを持っているEditText含むメモリ内の任意のオブジェクトとして、または安全でないとして安全です。バンドルの内容をディスクにシリアル化しないでください。保存するとPersistableBundleというセキュリティ情報を保存しないでください。

関連する問題