2013-08-09 10 views
8

La password di un utente in una variabile javascript nel browser mostra eventuali vulnerabilità di sicurezza specifiche, oltre alle normali vulnerabilità di sicurezza di un client basato su browser?Mantieni la password in variabile javascript - implicazioni sulla sicurezza?

Considerate questo frammento di come un semplice esempio - jsfiddle here

<label for="password">Password</label> 
<input type="password" id="password"/><br/><br/> 
<button type="button" id="pwdButton">Store password in window.password</button> 

<script> 
    function getContentsOfPasswordField() { 
     return jQuery("input#password").val(); 
    } 

    jQuery("button#pwdButton").on("click", function() { 
     window.password = getContentsOfPasswordField(); 
     alert("'" + password + "' stored in global var window.password") 
    }); 
</script> 

In questo esempio la variabile password è globale e persiste per tutta la durata della pagina, proprio per renderlo il più open-to-attacco possibile e dare lo scenario peggiore. Forse limitare la portata/durata della variabile può proteggerlo da certe classi di attacchi?

L'attacco che viene subito in mente è XSS, ma se il client è vulnerabile a XSS, in primo luogo, l'utente malintenzionato può leggere la password tramite la registrazione dei tasti comunque (vedere this) quindi tenerlo in una variabile non lo fa t, per quanto posso vedere, aumentare la vulnerabilità agli attacchi XSS.

Si prega di notare il punto della questione non è realmente se o non fare questo è una cattiva pratica, questo è più di una domanda fondamentale sul lato client di sicurezza web app :)

+2

Non si deve "rimanere" su una pagina di immissione della password dopo aver inserito la password. 1. Possibilità di altri software sulla password di lettura della macchina client (leggendo la memoria del browser), questo è un problema dal lato del cliente e può sempre essere applicato. 2. Possibilità di eventuali estensioni del browser che leggono la password. 3. Possibilità di qualsiasi script sulla stessa password di lettura della pagina. –

+1

Ma alcuni di questi potenziali attacchi sono più possibili perché la password è contenuta in una variabile? Se un software di terze parti malintenzionato può accedere alla VM di javascript, non può semplicemente archiviare o leggere la password quando viene inserita nell'input della password? – davnicwil

+2

impostandolo su 'window' eluderà qualsiasi sicurezza intrinseca (ad es. Per origine), se implementata dal browser del client. Inoltre, se lasci aperta la finestra della tua casa puoi essere derubato, ma questo non significa che devi lasciare la tua porta aperta. –

risposta

1

Lasciando la password in una variabile lascia aperto alle persone l'accesso semplicemente nei loro strumenti del browser! consente di pronunciare la funzione chiamata quando viene premuto il pulsante della password di archiviazione, memorizza la password in una variabile denominata password. Anche se questa variabile non viene più utilizzata sulla pagina dopo, semplicemente gestita in un secondo momento nel codice, tutto ciò che si deve fare è aprire gli strumenti di sviluppo nel proprio browser, aggiungere una dichiarazione come alert(password); e Bam, il la password si apre letteralmente di fronte a loro.

Ammettiamolo, qualsiasi codice abbastanza semplice da consentire a qualcuno di fare ciò che è probabilmente indegno di essere sul web, e ancora meno degno di essere intromesso, ma immagino che sia una lezione su quanto siamo vivi davvero.

+0

true, ma questa è davvero una domanda sugli attacchi remoti su una rete. Supponevo che la macchina dell'utente + fosse fisicamente sicura per la sessione! – davnicwil

+1

Oltre a pensarci, questo offre poche opportunità in più a un utente malintenzionato rispetto al browser che memorizza le password o i cookie di sessione, quindi niente di veramente fuori dall'ordinario. L'utente che mantiene il proprio browser fisicamente sicuro è fuori dal controllo dello sviluppatore dell'app Web. – davnicwil