Non senza SSL
Questo non è sicuro se la password viene inviata sulla rete in testo normale. Anche l'hashing della password sul lato server non è sicuro se la password viene inviata sulla rete in testo semplice.
Poiché il tag HTML <input type="password"/>
invia i suoi contenuti in testo normale, 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 fa apparire una finestra di dialogo nel browser che richiede una password, può essere o non essere testo chiaro, a seconda dei meccanismi di autenticazione che il server e il browser hanno in comune. Potrebbe quindi essere un modo per evitare questo senza usare SSL.)
Non se gli amministratori del sito sono sospetti
Ora, supponendo che tu stia utilizzando HTTPS per fare il sito web, questo potrebbe essere sicuro se ti fidi degli amministratori del sito (che possono leggere le password in 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 amministrano), ma se possono leggere la password, potrebbero anche essere in grado di utilizzare le coppie di login / password rubate sui siti di altre persone.
Un modo per proteggere 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 di hash, prova ad usare qualcosa di strong, e qualcosa che non ha ancora buone tabelle arcobaleno in natura. Puoi modificare la lunghezza del sale, se necessario, aggirare le tabelle arcobaleno.
A seconda dell'ambiente in cui ti trovi, la variabilità della latenza della rete e se i nomi utente devono essere noti pubblicamente, potresti volere un altro percorso di codice calcolare hash('0000'+entered_password)
se l'utente non esiste, per impedire agli attaccanti di determinare quali nomi utente sono validi in base al tempo necessario per determinare che la password non è corretta.