2015-09-24 15 views
8

PasswordBox.Password üzerine msdn documentation diyor: PasswordBox.Password özelliği ile şifre açıklanmadı mı?

Password özellik değerini almak

, hafızada düz metin olarak şifreyi ortaya çıkarmak. Bu olası güvenlik riskini önlemek için, şifreyi bir SecureString olarak almak için SecurePassword özelliğini kullanın.

yüzden güvenli olması için her şeyi bekliyor, PasswordChanged olayı benim bakış modeline SecurePassword göndermek ama PasswordBox en Password özelliğinde Snoop ile benim uygulamayı incelemek eğer ben düz metin olarak girilen şifreyi görüyoruz. Bu SecurePassword kullanmanın tüm amacı öldürmez mi? Şifreleri korumak için burada yapmam gereken başka bir şey var mı?

+0

Yani, 'PasswordBox'unuzun hangi özelliği görünüm modeline bağlanır? – torvin

+0

@torvin: \t Parola Kutusuna bağlamıyorum. Güvenlik endişeleri nedeniyle şifrelenebilir parola özellikleri yoktur, dediğim gibi, PasswordChanged olayını kod arkasıyla hallediyorum. DataContext'i sadece görünüm modelime döktüm ve parola özelliğini güncelliyorum. – Andikki

+0

'PasswordBox.SecurePassword' özelliğinizi, görünüm modelindeki' SecureString 'türünde bir özelliğe bağlamanız gerekir. Bu şekilde hafıza taramalarına karşı güvenli olacaktır (SecureString'in ne için olduğu). – torvin

cevap

5

Bu benim düşüncemdir. Snoop çalışan uygulamada kodunu enjekte eder.

Yani, temelde bir korsan aracı. Sadece GUI'nizle çalışan çok kullanımı kolay bir korsan aracı. Bu nedenle, herhangi bir öğenin kullanıcılardan bazı bilgileri gizlemek için görünürlüğünü değiştirmek, zayıf bir sekreterlik kararlığıdır. Kısıtlamalar, erişim ve güvenlik ile ilgili her şey UI katmanında ele alınmamalıdır. How to Snoop proof your wpf application? üzerinde bazı yollar var ama cevapların ana noktası, uygulamanızı snoopun herhangi bir şeyi ihlal etmesine izin vermeyecek şekilde tasarlamanız gerektiğidir. Örneğin, sunucudaki her şeyi doğrulayın. Sorunuzun

Arka:

iki senaryo vardır. Birincisi: kullanıcı bir şifre oluşturur. Bir kullanıcı veya kullanıcının kötü amaçlı yazılımı şu anda şifreyi görürse, bunun bir endişe olmadığını düşünüyorum. Ardından güvenli dize alırsınız ve saklarsınız. Ve kullanıcı şifresini temizle.

İkinci senaryo: kullanıcıya kayıtlı bir parola görüntülersiniz. İşin sırrı, sen göstermiyorsun. Bir şifrenin uzunluğunu biliyorsunuz, bu yüzden **** ile sadece engellenmiş metin kutusunu görüntüleyebilirsiniz. Bir kullanıcı bir şifreyi değiştirmek isterse - ona eski şifre ve yenisini doldurması gereken gerçek şifre kutuları verirsin ve # 1 senaryosuna geri döndük.

umut ışığı olan:

kullanıcının bir kullanıcı he've yazdıklarınızı biliyor ve zararlı izleyebilirsiniz beri, bir bellekte bir yere düz metin olarak yalan söylediğini, bu büyük bir anlaşma değil bir şifre girer zaman tuşlar basılı.

Eğer şifre hiç kullanıcıya geri vermek asla sakladığınız sonra


Güncelleme: Bu Parola kutusunun Şifre özelliği için bir kaynak kodu

public string Password 
     { 
      [SecurityCritical] 
      get 
      { 
       string password; 

       using (SecureString securePassword = this.SecurePassword) 
       { 
        IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(securePassword); 

        try 
        { 
         unsafe 
         { 
          password = new string((char*)ptr); 
         } 
        } 
        finally 
        { 
         System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr); 
        } 
       } 

       return password; 
      } 

Yani, MSDN’in söylediği şey, şifre özelliğine her eriştiğinizde, kodu (ya da hata ayıklama sırasında VS’de görüntüleyerek ya da Snoop’u görüntülerken) görüntüleyeceğiniz yöntem, ich, SecuredString'i düz metne çözer, belleğe ne ifade eder. Şifre özelliğini çağırmazsanız ve yazılım araçlarını inceleyerek aramadıysanız, şifreniz metin içinde düz metin olarak görünmez.

+0

Görsel ağacın gözetlenmesi veya tuş vuruşlarının engellenmesi, şifre dizgisini bellekten silmekten çok daha zor olarak görülüyor mu? – Andikki

+1

@Andikki, kötü amaçlı yazılım geliştirme konusunda uzman değilim, ama daha zor görülen kelimelerle ilgili bir şey beni şaşırtıyor. PasswordBox MS'de, siz veya başka biri kendi Parola özelliğini aramazsanız, parolada düz bir metin olarak görünmesini sağlamış. Daha fazla koruyabilirler mi? Onlar olmalı mı? – netaholic

+0

Güvenlik konusunda fazla bir şey bilmiyorum, bu yüzden sorularım naif olmalı. Yine de, böyle bir ortak unsuru yetkilendirme formu olarak uyguladığımdan emin olmak istiyorum. Parolanızı belleğe almamak için neden önlem almanız gerektiğini anlamaya çalışmak ve aynı zamanda erişilebilir bir şifre açığa çıkarma özelliğine sahip olmakla rahatsız edilmemelisiniz. Bir kullanıcının şifresini sızdırdığını bilmeden desteklemek için bir bellek anlık görüntüsü gönderdiği bir durumu hayal edebiliyorum. Bu tür şeylere karşı mı koruyoruz? – Andikki