绑定到PasswordBox的问题,这是一个安全风险,但我使用的是MVVM模式,我在这里发现了一些有趣的代码
http://www.wpftutorial.net/PasswordBox.html
我的LoginViewModel中基本上有用户名和密码的属性 . 用户名很好,因为它是一个TextBox .
我按照说明使用了上面的代码并输入了这个
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
当我将PasswordBox作为TextBox并且绑定路径=密码时,我的LoginViewModel中的属性已更新 .
我的代码很简单,基本上我有一个Command for my Button . 当我按下它时会调用CanLogin,如果它返回true,则调用Login . 您可以看到我在这里查看我的属性用户名,这非常有用 .
在登录中,我向我的服务发送用户名和密码,用户名包含我的视图中的数据,但密码为空|空
<TextBox Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"
MinWidth="180" />
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
我有我的TextBox,这没问题,但在我的ViewModel中,密码为空 .
我放了一个断点,确定代码进入静态助手类但它永远不会在我的ViewModel中更新我的密码
2 回答
请停止您正在尝试做的事情,因为在应用程序周围传递未加密的密码是一个可怕的安全风险 . 您应该像这样登录您的用户:
尽可能为它们提供用户名和密码输入字段,但应立即加密密码的值 . 您的数据库应仅存储这些加密密码 . 因此,要验证用户是否输入了正确的密码,只需比较加密密码的值即可 .
因此,您无需将用户密码字段的值传递给数据库进行检查...您需要将加密的密码值从数据库传递到视图模型 .
您应该按照MSDN的建议使用SecureString,请参阅此处的参考资料:
wpf password box into a SecureString in C#
让我知道如果有帮助,我们已成功通过附加属性绑定密码,但希望您可以自己学习上述链接:)