簡體   English   中英

綁定PasswordBox密碼是個壞主意嗎?

[英]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>

沒有綁定密碼框思考窺探它不會產生結果是不明智的想法!

無論如何,Passwordbox.Password仍會顯示密碼 ![在此處輸入圖像說明 ] 1

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM