【问题标题】:What to do with a password entry on screen rotate如何处理屏幕旋转上的密码输入
【发布时间】:2016-11-20 22:25:21
【问题描述】:

在我的应用程序中,我有一个片段,用户在其中输入密码。这个片段可以旋转。在旋转时,我希望使用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", "");
        ...
    }
}

【问题讨论】:

  • 我会选择 saveInstanceState。它将仅存储在内存中,同样适用于密码字段。
  • 片段有一个SaveFragmentInstanceState...就安全而言?它与内存中的任何对象一样作为安全(或不安全),包括部分/完整密码的EditText。不要将捆绑内容序列化到磁盘或使用 PersistableBundle.... 放置安全信息。
  • @SushiHangover 好吧,完美!将其添加为答案,我会给你打勾!

标签: android android-fragments xamarin passwords bundle


【解决方案1】:

Fragments 有一个SaveFragmentInstanceState 方法。

保存给定 Fragment 的当前实例状态。这可以在以后创建 Fragment 的新实例并将其添加到 Fragment 管理器时使用,以使其自身创建以匹配此处返回的当前状态。

参考:Xamarin:SaveFragmentInstanceState 参考:安卓:saveFragmentInstanceState

安全吗?

它与内存中的任何对象一样安全,或不安全,包括其中包含部分/完整密码的EditText。不要将捆绑内容序列化到磁盘或使用PersistableBundle 保存安全信息...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2012-10-04
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多