Non senza SSL
Ciò non è sicuro se la password viene inviata in rete in testo semplice. Anche l'hash della password sul lato server non è sicuro se la password viene inviata sulla rete in testo semplice.
Poiché il <input type="password"/>
tag HTML invia i suoi contenuti in testo semplice, questo sarà un problema, indipendentemente dal modo in cui memorizzi la password sul server, a meno che il tuo sito web non utilizzi SSL per trasmettere la password.
(L'autenticazione HTTP, che apre una finestra di dialogo nel browser che richiede una password, può essere o meno un testo chiaro, a seconda dei meccanismi di autenticazione che il server e il browser hanno in comune. Quindi potrebbe essere un modo per evitarlo senza usare SSL).
Non se gli amministratori del sito sono sospetti
Ora, supponendo che tu stia usando HTTPS per fare il sito web, questo potrebbe essere sicuro se ti fidi dei tuoi amministratori del sito (che possono leggere password di testo semplice) e di altre persone che hanno accesso alla macchina per comportarsi correttamente. Ora, può essere ovvio che possono fare tutto ciò che vogliono con il tuo sito Web (dal momento che lo gestiscono), ma se sono in grado di leggere la password, potrebbero anche essere in grado di utilizzare le coppie di login / password rubate sui siti di altre persone.
Un modo che protegge le password dall'amministratore
Un modo sicuro per archiviare e controllare le password è il seguente:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
Per la funzione hash, prova a usare qualcosa di forte e qualcosa che non ha ancora buoni tavoli arcobaleno in natura. È possibile modificare la lunghezza del sale, se necessario, aggirare i tavoli arcobaleno.
A seconda dell'ambiente in cui ci si trova, della variabilità della latenza della rete e del fatto che i nomi degli utenti siano noti pubblicamente, è possibile che sia necessario calcolare un altro percorso del codice hash('0000'+entered_password)
se l'utente non esiste, al fine di impedire agli aggressori di determinare quali nomi utente sono validi in base al tempo impiegato determina che la password non è corretta.