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

c# – 绑定PasswordBox密码是个坏主意吗?,第1张

概述我已经阅读 WPF PasswordBox中的密码没有依赖属性用于为安全起见绑定密码.尽管如此,有 ways to bind it anyway. MVVM模式的用户需要这个数据绑定; viewmodel无法直接触摸PasswordBox而不会破坏模式.在MVVM设置中使用PasswordBoxes的一种方法是将pass the entire PasswordBox control添加到ViewM 我已经阅读 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>
总结

以上是内存溢出为你收集整理的c# – 绑定PasswordBox密码是个坏主意吗?全部内容,希望文章能够帮你解决c# – 绑定PasswordBox密码是个坏主意吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1259438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存