【发布时间】:2010-08-09 21:57:15
【问题描述】:
我已经阅读了几篇关于如何使用附加属性绑定到 WPF 中 PasswordBox 的值的文章。但是,每篇文章也都引用了 .NET 文档,该文档解释了为什么 PasswordBox 一开始就不能绑定。
我不认为自己是安全专家,但我认为 Microsoft 的某个人知道他们在做什么,我不应该付出努力试图撤销它。
因此,我想出了自己的解决方案。
public class LoginViewModel
{
// other properties here
public PasswordBox Password
{
get { return m_passwordBox; }
}
// Executed when the Login button is clicked.
private void LoginExecute()
{
var password = Password.SecurePassword;
// do more stuff...
}
}
然后,在我的 XAML 中,我只是通过将 Password 字段绑定到 ContentPresenter 来呈现 PasswordBox。
所以我的问题是……这样做有问题吗?我意识到通过让实际控件出现在我的 ViewModel 中,我在某种程度上破坏了 MVVM,但至少这似乎比不保护密码字段更正确。
如果这实际上是一个问题,是否有人提出了不涉及使用附加属性并将密码存储在 ViewModel 中的解决方案?
谢谢! -J
【问题讨论】:
-
附加属性方法到底有什么问题?属性类型是字符串吗?为什么不让它成为 SecureString?
-
就像我上面说的,它似乎有一个原因,它不是一个 DependencyProperty 开始,所以找到一个变通方法似乎是错误的方法。我想我可以轻松地“绑定”到 SecurePassword 属性。
-
Password 属性可绑定的问题是:它的值很容易被外部软件跟踪。比如 SNOOP。那么窃取你的密码是多么容易。
-
想解释一下 ContentPresenter 吗?
-
@ktutnik 我知道这是一个老生常谈的问题,但只要我可以输入密码,开始窥探,聚焦密码框,检查密码属性并看到明文结果,我就不会不要专注于这个问题——如果你问我,拥有房产而不是 DP 的额外安全性并不能证明使用它时的匆忙。