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

我已经读过, 出于安全原因, WPF PasswordBox中的密码没有用于绑定密码的依赖项属性。 尽管如此, 无论如何都有办法绑定它 。

MVVM模式的用户需要这种数据绑定; viewmodel无法在不破坏模式的情况下直接触摸PasswordBox。 在MVVM设置中使用PasswordBoxes的一种方法是将整个PasswordBox控件传递给ViewModel,但这无论如何都会破坏模式。 绑定密码可能是使用MVVM处理密码的最简洁方法。

有一个反对绑定密码的论据,因为这会将明文密码保存在未加密的内存中,直到它被垃圾收集。 但是,我看到它的方式是,从您访问Password属性的那一刻起,密码就会存储在未加密的内存中。 这个观点(或类似的)似乎在这个问题上得到了支持 。 当然,它会在没有约束力的情况下在更短的时间内存在(不是登录forms有长期存在的倾向),但风险仍然存在。

鉴于这些论点,绑定密码真的是一个坏主意吗? 为什么?

使用WPF Inspector或Snoop等工具可以监视密码字符串。 将PasswordBox传递给视图模型的另一种方法是将Behavior 对象附加到PasswordBox对象,如下所示:

 public sealed class PasswordBoxBehavior : Behavior { 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代码:

  ...      ...