2009-11-16 10 views
5

Uso regolarmente un modulo standard per inviare le informazioni di accesso tramite il metodo POST HTTP e quindi convalidarlo utilizzando php per verificare se i dettagli sono corretti. Uso un hash MD5 sulle password (e talvolta sui nomi utente) per dare un certo grado di sicurezza, quindi non sto memorizzando una password non elaborata nel mio codice nel caso in cui venga visualizzata da una persona non autorizzata, o qualcosa del genere.Utilizzo di POST HTTP per i moduli di login

Sono quasi sicuro di aver appena fatto in modo che qualcuno con una vaga comprensione della sicurezza emetta un gemito o almeno un sospiro esasperato.

Recentemente ho lavorato su un forum che ha un database MySQL di utenti e password, le password sono memorizzate come hash MD5, ma temo che quando si invia il modulo di login tramite HTTP POST la possibilità che le informazioni vengano intercettate è lì. Sono a conoscenza delle possibilità degli attacchi a iniezione di MySQL e penso di essere al sicuro da eventuali attacchi semplici.

Non sono un esperto di sicurezza quando si tratta di questo genere di cose, ma vorrei limitare le possibilità di intercettare le password quando vengono inviate tramite HTTP.

Non è un grande sito, quindi non sono eccessivamente preoccupati per gli attacchi e HTTPS non è davvero una possibilità, quindi sto cercando consigli su pratiche standard dovrei segue quando si utilizza questo metodo di invio di informazioni di accesso.

Acclamazioni

risposta

5

Si avrebbe bisogno di fare un hash sul lato client della password sulla base di un sale sfida fornito dal server. Questa sfida dovrebbe essere diversa per ogni richiesta.

In questo modo, anche se l'hash della password viene intercettato, non sarebbe utilizzabile per qualcosa di utile, poiché la prossima autenticazione richiederebbe un diverso hash.

In ogni caso, HTTPS dovrebbe essere il modo giusto e sicuro.

+0

qual è il migliore hasher (se è solo un termine) per farlo usando php? e qual è il modo migliore per cancellare un input prima di inviarlo? Suppongo, anche se potrebbe essere sbagliato, che vorrei usare javascript per prendere gli input degli utenti e cancellarli prima di inviare il modulo, ma se javascript è disattivato questo non funzionerebbe. – andyface

+0

Di solito mi atteno agli algoritmi standard, sia per la sicurezza che per la compatibilità. PHP ha una funzione sha1() che va bene per la maggior parte degli usi. Ovviamente hai bisogno di un codice client per farlo, sia esso javascript, un'applet, un plug-in del browser, ecc. Andrei per JS. È sempre possibile fornire un modulo di accesso meno sicuro e senza script. – Patonza

+0

https non viene memorizzato nella cache, vero? Non credo che ne abbiate bisogno per qualche piccolo forum ... –

0

Un suggerimento di base sarebbe: non fidatevi di nessuno.

Quindi, prova i dati POST per l'iniezione SQL, per Javascript nei campi di testo ed evita le password semplici memorizzate nel tuo database.

+0

"non fidarti di nessuno". - Non lo faccio mai: D Grazie per i suggerimenti. – andyface

0

È necessario implementare HTTPS per tutti i tipi di accesso, hash o meno.

Se la password è sottoposta a hash ma trasmessa da HTTP, chiunque potrebbe semplicemente rubare l'hash e inviarlo da solo. La tua soluzione non fornisce una vera sicurezza se non quella di oscurare la vera password.

È sempre possibile utilizzare un certificato autofirmato se l'implementazione HTTPS e le autorità di certificazione rappresentano un problema.

Problemi correlati