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 :)
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. –
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
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. –