我已经阅读到,WPF PasswordBox中的密码不具备绑定密码的依赖属性,这是出于安全原因。尽管如此,仍然有方法可以绑定它。
MVVM模式的用户需要进行数据绑定;视图模型不能直接触及PasswordBox,否则会破坏该模式。在MVVM设置中处理PasswordBoxes的一种方法是将整个PasswordBox控件传递给ViewModel,但这样做仍然会破坏该模式。使用数据绑定来绑定密码可能是使用MVVM处理密码的最清洁方式。
MVVM模式的用户需要进行数据绑定;视图模型不能直接触及PasswordBox,否则会破坏该模式。在MVVM设置中处理PasswordBoxes的一种方法是将整个PasswordBox控件传递给ViewModel,但这样做仍然会破坏该模式。使用数据绑定来绑定密码可能是使用MVVM处理密码的最清洁方式。
有人反对将密码绑定argument against binding the Password,因为这会使明文密码保留在未加密的内存中,直到被垃圾回收。然而,我认为,从你访问Password
属性的那一刻起,密码就已经以明文形式存储在未加密的内存中了。this question似乎也支持这种观点(或类似观点)。当然,如果不进行绑定,它在内存中的时间会更短(尽管登录表单本来就没有长寿命),但风险仍然存在。
鉴于这些论点,将密码绑定真的是一个坏主意吗?为什么?
SecureString
(直到计算密码哈希值),否则我认为保持这种安全级别没有太大优势,并且只需使用您第一个链接中建议的附加属性即可。 - Douglas