[英]Is it a bad idea to bind PasswordBox password?
我已經讀過, 出於安全原因, 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
}
}
}
和XAML代碼:
<Window ...
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
...
<PasswordBox ....>
<i:Interaction.Behaviors>
<local:PasswordBoxBehavior />
</i:Interaction.Behaviors>
</PasswordBox>
...
</Window>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.