c# - هل هي فكرة سيئة لربط باسوردبوكس كلمة المرور؟



wpf security (1)

لقد قرأت أن كلمة المرور في وف باسوردبوكس لا تملك خاصية التبعية لربط كلمة المرور لأسباب أمنية . على الرغم من ذلك، هناك طرق لربط ذلك على أي حال .

المستخدمين من نمط مففم تتطلب هذا داتابيندينغ. لا يمكن لمس فيودموديل لمس باسوردبوكس مباشرة دون كسر النمط. طريقة واحدة للعمل مع باسوردبوكسيس في إعداد مففم لتمرير عنصر تحكم باسوردبوكس بأكمله إلى فيوموديل، ولكن هذا يكسر نمط على أي حال. ربط كلمة المرور هو على الارجح أنظف طريقة للعمل مع كلمات السر باستخدام مففم.

هناك حجة ضد ملزمة كلمة المرور لأن هذا من شأنه أن يحافظ على كلمة المرور نص عادي في الذاكرة غير مشفرة حتى يحصل القمامة التي تم جمعها. الطريقة التي أراها، ومع ذلك، هو أن يتم تخزين كلمة المرور في ذاكرة غير مشفرة على أي حال من لحظة الوصول إلى خاصية Password . يبدو أن هذا الرأي (أو ما شابه ذلك) يكون معارضا في هذا السؤال . وبطبيعة الحال سيكون في الذاكرة لفترة أقصر دون ملزمة (وليس أن أشكال تسجيل الدخول لديها ميل إلى أن عاش طويلا على أي حال)، ولكن الخطر لا يزال هناك.

نظرا لهذه الحجج، هل هو حقا فكرة سيئة لربط كلمة المرور؟ و لماذا؟


باستخدام أدوات مثل المفتش وف أو سنوب يمكنك تجسس سلسلة كلمة المرور. بديل لتمرير باسوردبوكس لنموذج العرض هو إرفاق كائن السلوك <إيليمنت> بكائن باسوردبوكس مثل أدناه:

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
        }
    }
}

و رمز زمل:

<Window ...
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
    ...
    <PasswordBox ....>
        <i:Interaction.Behaviors>
            <local:PasswordBoxBehavior />
        </i:Interaction.Behaviors>  
    </PasswordBox>
    ...
</Window>




mvvm