2015-09-24 19 views
8

La msdn documentation su PasswordBox.Password dice:Non è stata rivelata la password con la proprietà PasswordBox.Password?

Quando si ottiene il valore della proprietà password, si espone la password come testo normale in memoria. Per evitare questo potenziale rischio per la sicurezza, utilizzare la proprietà SecurePassword per ottenere la password come SecureString.

anch'io mando SecurePassword al mio modello di vista sul PasswordChanged evento, aspettandosi di tutto per essere sicuro, ma se io ispezionare la mia domanda con Snoop, nella proprietà di PasswordBox Password vedo la password sono entrato in testo normale. Non uccide l'intero scopo di usare SecurePassword? C'è qualcos'altro che dovrei fare qui per proteggere le password?

+0

Quindi, quale proprietà del 'PasswordBox' si associa al modello di visualizzazione? – torvin

+0

@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

+0

È 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

risposta

5

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.

+0

Significa che snooping dell'albero visivo o intercettazione di sequenze di tasti è considerato molto più difficile per il malware rispetto allo sniffare la stringa della password dalla memoria? – Andikki

+1

@Andikki, non sono un esperto nello sviluppo di malware, ma qualcosa sulle parole "considerate molto più difficili" mi confonde. Nella password di PasswordBox MS, la password viene visualizzata in memoria come testo normale, a meno che tu o qualcun altro non chiami la sua proprietà Password. Potrebbero averlo protetto di più? Dovrebbero avere? – netaholic

+0

Non so molto sulla sicurezza, quindi le mie domande devono essere ingenue. Eppure voglio assicurarmi di implementare un elemento così comune come il modulo di autorizzazione giusto. Cercando di capire perché dovresti prendere delle precauzioni per non mettere la tua password in memoria e allo stesso tempo non dovrebbe essere infastidita dall'avere una proprietà accessibile alla rivelazione della password. Posso immaginare una situazione in cui un utente invia un'istantanea di memoria da supportare, inconsapevole del fatto che sta perdendo la sua password. Stiamo proteggendo da questo tipo di cose qui? – Andikki

Problemi correlati