Gig*_*igi 11 c# security data-binding wpf mvvm
我已经读过,出于安全原因, WPF PasswordBox中的密码没有用于绑定密码的依赖项属性.尽管如此,无论如何都有办法绑定它.
MVVM模式的用户需要这种数据绑定; viewmodel无法在不破坏模式的情况下直接触摸PasswordBox.在MVVM设置中使用PasswordBoxes的一种方法是将整个PasswordBox控件传递给ViewModel,但这无论如何都会破坏模式.绑定密码可能是使用MVVM处理密码的最简洁方法.
有一个反对绑定密码的论据,因为这会将明文密码保存在未加密的内存中,直到它被垃圾收集.然而,我看到它的方式是,从您访问该Password属性的那一刻起,密码就会存储在未加密的内存中.这个观点(或类似的)似乎在这个问题中被借调.当然,它会在更短的时间内在没有绑定的情况下存在(不是登录形式有长期存在的倾向),但风险仍然存在.
鉴于这些论点,绑定密码真的是一个坏主意吗?为什么?
使用WPF Inspector或Snoop等工具可以监视密码字符串.将PasswordBox传递给视图模型的另一种方法是将Behavior <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
}
}
}
Run Code Online (Sandbox Code Playgroud)
和XAML代码:
<Window ...
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
...
<PasswordBox ....>
<i:Interaction.Behaviors>
<local:PasswordBoxBehavior />
</i:Interaction.Behaviors>
</PasswordBox>
...
</Window>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2404 次 |
| 最近记录: |