Devo convalidare gli input del modulo di autenticazione?

0

Ho una pagina di accesso con un modulo in cui è possibile inserire l'indirizzo email e la password del proprio account.

Sto facendo le seguenti cose prima anche tentando di autenticare un utente:

  • Convalida dell'indirizzo email per il formato corretto.

  • Convalida della password per non essere vuota.

Se qualcuno di questi non è valido, riporto gli errori di convalida come:

  • "Non hai inserito un indirizzo email." e / o "Devi inserire una password.".

È anche suscettibile agli attacchi temporali poiché la verifica della password non viene tentata quando ci sono errori.

Sarebbe più sicuro accettare semplicemente qualsiasi input e fare semplicemente un rapporto con un "accesso non riuscito" generico. errore?

    
posta Kid Diamond 26.09.2014 - 12:30
fonte

2 risposte

1

Mi dispiace, non ho la parte sulla tua preoccupazione con gli attacchi temporali. Finché le password sono correttamente hash e il confronto viene eseguito sugli hash, la tua applicazione dovrebbe essere al sicuro da questo tipo di attacco ai canali laterali. Se una chiamata al database è stata effettuata o meno (2s vs 1s) non perde nessuna informazione sulla tua password.

È sempre opportuno convalidare gli input dei moduli, indipendentemente dal fatto che siano memorizzati nel database, nel caso in cui la query del database sia suscettibile a un'iniezione SQL. Questa strategia è conosciuta come difesa in profondità . Non si sa mai quando il parser di query è reso vulnerabile da alcuni strani input dell'utente come il recente exploit shellshock.

In realtà non c'è un grosso problema di sicurezza se si segnala il login fallito mostrando singoli errori o raggruppandoli. Ciò che un utente malintenzionato può ottenere da qui (se un indirizzo e-mail è valido) può anche essere ricavato dalla pagina di registrazione cercando di registrarsi con quell'indirizzo email.

    
risposta data 26.09.2014 - 13:24
fonte
0

La convalida del formato del campo dell'indirizzo e-mail o della password per essere vuoti può essere eseguita sul lato client e non comporta un attacco temporaneo, perché non viene eseguito alcun confronto con l'hash effettivo della password (o password) che è memorizzata sul lato server.

L'attacco di temporizzazione si verifica se l'operazione di confronto non è implementata correttamente.

Consideriamo uno scenario in cui, L'ipotesi dell'attaccante="12345678" Password effettiva="password"

Dopo aver inviato la password indovinata, il server dovrebbe completare il controllo e non restituire il risultato dopo la prima mancata corrispondenza. Nel caso precedente, la prima mancata corrispondenza è al primo carattere in sé dal 1! = P. Se il server segnala questo risultato, l'utente malintenzionato scopre che la password indovinata era completamente sbagliata. Il server dovrebbe confrontare ogni lettera di password indovinata con la password effettiva e restituire il risultato. Nello scenario precedente tutti gli 8 caratteri devono essere confrontati e, infine, l'utente malintenzionato dovrebbe ricevere una notifica relativa al nome utente o alla password non validi.

    
risposta data 26.09.2014 - 12:47
fonte

Leggi altre domande sui tag