Di solito chiedo all'utente il nome utente e la password ed eseguo una query sul database per restituire true o false, pensi che sia abbastanza sicuro? pensi che sia meglio aggiungere alcuni passaggi alla procedura?
"Sicurezza" comprende l'intero sistema, inclusi il server, il database, il meccanismo di trasporto tra client e server, il browser del client ... e l'utente umano. Di solito, questo ultimo elemento sarà il collo di bottiglia della sicurezza. Puoi (e dovresti) fare un sacco di cose per elaborare correttamente la password (usa HTTPS per il trasferimento, memorizza solo un < a href="https://security.stackexchange.com/a/31846/5411"> hash correttamente versione della password, ...) ma, in definitiva, la tua sicurezza non sarà maggiore della cura con cui l'utente sceglierà e manterrà privata la sua password.
Puoi aiutare l'utente con educazione e fornitura di strumenti per la generazione di password , avendo cura di adulare l'utente in cooperazione, piuttosto che costringerlo alla sottomissione (gli utenti arrabbiati non sono mai una buona cosa per la sicurezza). Tuttavia, le password standard ti porteranno così lontano (per "standard" intendo "le password che gli utenti umani ricordano nella loro mente").
I metodi più pesanti con almeno potenziale per una sicurezza più strong includono:
I professionisti della sicurezza parlano spesso di autenticazione a più fattori come un quadro di classificazione generico per i metodi di autenticazione, che può aiutare nel valutare quale tipo di attacchi il sistema avrebbe resistito (questa classificazione è spesso abusata in giudizi semplicistici come "2FA è buono, 1FA è cattivo", che si riferiscono maggiormente alla conformità amministrativa e alle pubbliche relazioni rispetto alla sicurezza effettiva).
Dipende da quale punto di vista vuoi aumentare la sicurezza, puoi aggiungere forme aggiuntive di autenticazione e verifica, ad esempio:
Qualcosa che potrebbe essere interessante è aggiungere l'autenticazione a due fattori. Ad esempio, Google offre Google Authenticator . Il che richiede che gli utenti inseriscano anche un token generato casualmente (il token è generato sul tuo smartphone).
Oltre all'autenticazione, puoi anche controllare da dove nel mondo sono connessi. Ad esempio se si collegano dai Paesi Bassi e improvvisamente si stanno registrando da un IP in Brasile, qualcosa potrebbe essere sbagliato. Quindi è meglio bloccare temporaneamente l'account e inviare all'utente un'email con un link di notifica e riattivazione. In questo modo, se l'utente tenta di accedere è legittimo, sarà in grado di riattivare il proprio account. Altrimenti noteranno che qualcuno in Brasile conosce la loro password. (questo non è infallibile se gli utenti stanno riutilizzando le password per la loro e-mail).
È possibile configurare Apache (e presumo IIS) per accettare solo connessioni in cui il client ha un certificato e, successivamente, è possibile richiedere l'autenticazione a due fattori (password / chiave One Time). Sembra eccessivo, ma non è troppo difficile da implementare, se controlli i dispositivi da cui gli utenti si connetteranno (pensa alla web mail aziendale, dove possiedi il laptop / telefono).
C'è una buona spiegazione qui: link
È sufficiente per la maggior parte dei siti Web, ma se stai utilizzando un sito Web bancario o di altri servizi finanziari puoi utilizzare l'autenticazione a due fattori.
Le altre risposte hanno discusso dell'autenticatore di Google e dell'uso della geo-localizzazione per tracciare l'origine della richiesta di autenticazione. Se hai configurato un gateway mobile, potresti persino inviare una password One Time (OTP) sul telefono cellulare dell'utente per autenticare lui oltre alle normali credenziali.
Ricorda una cosa, l'aggiunta di un livello di autenticazione aggiuntivo aggiunge sicurezza, ma non devi mai trascurare il fattore dell'esperienza utente, essenziale per il successo di qualsiasi sito web. A meno che tu non stia gestendo un sito Web che si occupa di transazioni finanziarie, non guai ai tuoi utenti con funzionalità di sicurezza aggiuntive. Un sito di giochi o un forum di discussione possono fare con l'autenticazione semplice.
Potresti:
usa un sistema operativo sempre aggiornato;
utilizza il protocollo HTTPS nella tua pagina di accesso per proteggere le informazioni di accesso;
utilizza i cookie per l'autenticazione degli utenti dopo il login;
attiva un'autenticazione a due fattori (un esempio è Google Authenticator);
memorizza l'IP degli utenti e l'accesso di accesso per identificare un probabile attacco;
usa una protezione a forza bruta, l'autenticazione a due fattori è a senso unico, un altro modo è usare il mio ultimo progetto Colobe per identificare automaticamente gli attacchi di forza bruta e li blocco.
Un passaggio che potrebbe rendere più sicuro il tuo sito sarebbe rimuovere l'autenticazione basata sulla ricerca del database dall'app web e dal database principale e spostare quell'autenticazione nel proprio server (o almeno un processo separato), comunicando tramite un'API di servizi . In questo modo, anche se qualcuno compromette il sito web, non ottiene un accesso facile a tutti gli hash delle password.
Questo è un esempio di separazione dei privilegi - spostamento delle operazioni con privilegi dal codice non privilegiato.
Un server LDAP viene spesso utilizzato come server di autenticazione, ma è necessario prestare attenzione per utilizzare un metodo di autenticazione sicuro.
Leggi altre domande sui tag authentication passwords