加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 绑定PasswordBox密码是个坏主意吗?

发布时间:2020-12-15 06:43:56 所属栏目:百科 来源:网络整理
导读:我已经阅读 WPF PasswordBox中的密码没有依赖属性用于为安全起见绑定密码.尽管如此,有 ways to bind it anyway. MVVM模式的用户需要这个数据绑定; viewmodel无法直接触摸PasswordBox而不会破坏模式.在MVVM设置中使用PasswordBoxes的一种方法是将pass the ent
我已经阅读 WPF PasswordBox中的密码没有依赖属性用于为安全起见绑定密码.尽管如此,有 ways to bind it anyway.

MVVM模式的用户需要这个数据绑定; viewmodel无法直接触摸PasswordBox而不会破坏模式.在MVVM设置中使用PasswordBoxes的一种方法是将pass the entire PasswordBox control添加到ViewModel中,但这样会打破模式.绑定密码可能是使用MVVM处理密码的最简单的方法.

有一个argument against binding the Password,因为这将保持明文密码在未加密的内存,直到它收集垃圾.然而,我看到的方式是,从您访问Password属性的那一刻起,密码就存储在未加密的内存中.这个观点(或类似的)似乎在this question被借调.当然,这将是一个较短的期限,而不具有约束力(不是登录形式有长期存在的倾向),但风险仍然存在.

给出这些论据,绑定密码真的是一个坏主意吗?为什么?

解决方法

使用WPF检查器或Snoop等工具可以监视密码字符串.将PasswordBox传递给视图模型的另一种替代方法是附加一个“行为< UIElement>对象到您的PasswordBox对象,如下所示:
public sealed class PasswordBoxBehavior : Behavior<UIElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.LostKeyboardFocus += AssociatedObjectLostKeyboardFocus;
    }

    protected override void OnDetaching()
    {
        AssociatedObject.LostKeyboardFocus -= AssociatedObjectLostKeyboardFocus;
        base.OnDetaching();
    }

    void AssociatedObjectLostKeyboardFocus(object sender,KeyboardFocusChangedEventArgs e)
    {
        var associatedPasswordBox = AssociatedObject as PasswordBox;
        if (associatedPasswordBox != null)
        {
            // Set your view-model's Password property here
        }
    }
}

和XAML代码:

<Window ...
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
    ...
    <PasswordBox ....>
        <i:Interaction.Behaviors>
            <local:PasswordBoxBehavior />
        </i:Interaction.Behaviors>  
    </PasswordBox>
    ...
</Window>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读