Questo è il mio modesto parere.
Snoop inietta il proprio codice nell'applicazione in esecuzione. Quindi, è fondamentalmente uno strumento di hacking. Uno strumento di hacking molto facile da usare, che funziona solo con la GUI. Questo è il motivo per cui la semplice modifica della visibilità di qualsiasi elemento per nascondere alcuni dati dall'utente è una cattiva idea di sicurezza. Tutto ciò che riguarda le restrizioni, l'accesso e la sicurezza non deve essere gestito a livello dell'interfaccia utente. Ci sono modi su How to Snoop proof your wpf application? ma il punto principale delle risposte è che devi progettare la tua applicazione nel modo in cui non permetti a snoop di violare nulla. Convalida tutto sul server, per esempio.
Torna alla tua domanda:
Ci sono due scenari. Il primo è: l'utente crea una password. Credo che questo non sia un problema, se il malware di un utente o di un utente vedrà la password in questo momento. Quindi si riceve e memorizza una stringa protetta. E cancella la password dell'utente.
Secondo scenario: viene visualizzata una password memorizzata per l'utente. Il trucco è: non lo visualizzi. Conoscete una lunghezza di una password, quindi potete visualizzare solo la casella di testo disabilitata con ****. E se un utente vuole cambiare una password, gli dai la password effettiva, che deve riempire con la vecchia password e una nuova e torniamo allo scenario n. 1.
Il rivestimento d'argento è:
Quando un utente immette una password non è un grosso problema, che giace in chiaro da qualche parte in una memoria, dal momento che un utente sa cosa he've digitato e malware in grado di monitorare tasti premuti.
Dopo aver memorizzato la password mai dare indietro all'utente
Aggiornamento: Questo è un codice sorgente per la proprietà Password di un casella Password
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;
}
Quindi, suppongo che cosa sta dicendo MSDN, è che ogni volta che si accede alla proprietà Password, chiamandola in codice (o visualizzandola in VS mentre si esegue il debug o visualizzandola Snoop) si chiama il metodo get, Decifra SecuredString in testo semplice, ciò che lo espone alla memoria. Se non si chiama la proprietà Password e non la si chiama ispezionando in strumenti software, la password non viene visualizzata in memoria in testo normale.
Quindi, quale proprietà del 'PasswordBox' si associa al modello di visualizzazione? – torvin
@torvin: \t Non collego a PasswordBox. Non ha proprietà di password associabili a causa di problemi di sicurezza, quindi, come ho detto, gestisco l'evento PasswordChanged in code-behind. Ho appena lanciato DataContext sul mio tipo di modello di vista e ho aggiornato la proprietà della password. – Andikki
È necessario associare la proprietà 'PasswordBox.SecurePassword' a una proprietà di tipo' SecureString' nel modello di visualizzazione. In questo modo sarà sicuro contro le scansioni di memoria (che è ciò che 'SecureString' è per). – torvin