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.
Yani, 'PasswordBox'unuzun hangi özelliği görünüm modeline bağlanır? – torvin
@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
'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