Per la maggior parte dei siti web, ci sono diverse aree al suo interno (home page, profilo utente, pagina di amministrazione, ecc.), Alcuni dei quali saranno pubblici e altri dovranno essere limitati solo a determinati utenti. Spesso desideri identificare in modo univoco gli utenti in modo da poter fornire contenuti personalizzati o acquisire informazioni specifiche da un utente. Molti siti hanno anche bisogno di proteggere parte del sito, come un'area amministrativa per mantenere e aggiornare il contenuto del sito. In un sito CMS, alcuni utenti potrebbero essere in grado di creare contenuti, ma altri devono approvare tale contenuto prima che venga mostrato al pubblico.
Qualunque sia la necessità, la limitazione o la personalizzazione richiede l'identificazione di ogni utente che accede al tuo sito. Per un sito Internet rivolto a utenti generici, il nome utente e la password prevale ancora in gran parte perché non esiste un'opzione migliore. Ci sono altre opzioni se lavori in ambienti speciali, come una Intranet aziendale, dove hai il controllo sui visitatori del sito.
Mentre un bisogno comune, i login e le password sono spesso gestiti in un modo che lascia il sito Web e i suoi utenti, inutilmente più vulnerabili agli attacchi di sicurezza. Seguendo alcune best practice, puoi proteggere meglio il tuo sito e i suoi contenuti dagli hacker. Le conseguenze di una scarsa protezione possono essere gravi. Immagina un sito in cui qualsiasi utente possa pubblicare contenuti che sembrano provenire dalla società a causa di una cattiva gestione delle password o di un negozio online in cui qualsiasi utente può visualizzare tutti gli ordini effettuati sul sito.
Diamo un'occhiata ad alcune considerazioni sulla sicurezza durante il lavoro con login e password sui tuoi siti web.
Il login è costituito da un nome utente che ti identifica e una password che ti convalida è l'utente che rivendichi di essere. I siti Web spesso consentono all'utente di specificare un nome utente personalizzato o utilizzare l'indirizzo e-mail dell'utente come nome utente.
Le e-mail non cambiano spesso e la maggior parte dei siti Web raccoglie già queste informazioni, quindi l'utente avrà meno probabilità di dimenticare la propria e-mail rispetto a un nome utente che hanno creato. L'e-mail sarà inoltre automaticamente unica in quanto gli utenti raramente condividono un account e-mail e chi lo fa, probabilmente non vorrebbe account separati.
Gli svantaggi di una e-mail includono che due persone che condividono un'email non possono avere account separati. Inoltre, se il tuo sito ha una ragione legittima per cui una persona ha più account, questo potrebbe non essere possibile con le e-mail, ma è più facile da implementare utilizzando i nomi utente. È anche probabile che un'e-mail sia più facile da hackerare poiché un utente probabilmente usa la stessa email in ogni sito, ma la maggior parte dei nomi utente probabilmente non sarà molto più difficile da hackerare, poiché gli utenti tendono a riutilizzare i nomi utente proprio come riutilizzano le password.
A meno che tu non abbia una ragione specifica per evitare un indirizzo email, preferisci l'email per il nome utente di accesso. Anche l'uso dell'email è diventato la norma sui siti Web. Non dimenticare, però, di fornire un accesso via e-mail con un modo per cambiare l'e-mail. Senza questa funzione, un utente dovrebbe creare un nuovo account e perdere tutta la cronologia passata solo perché ha cambiato provider Internet o ha perso un account precedente a causa della laurea o della modifica dei lavori, causando l'allontanamento della vecchia email..
Fai sempre attenzione quando utilizzi l'e-mail come accesso per non mostrarlo pubblicamente, sia per motivi di privacy che per problemi di prevenzione dello spam.
La pagina di accesso del tuo sito web sarà il primo punto di ricerca per un hacker. L'hacker proverà a determinare account validi esistenti su un sito web. Gestire correttamente la pagina di accesso renderà più difficile il lavoro degli hacker. Per iniziare, è necessario ridurre al minimo la quantità di dati che un accesso non riuscito fornisce a un utente malintenzionato. Il tuo pensiero iniziale quando qualcuno inserisce un nome utente che non è riconosciuto potrebbe essere quello di fornire un messaggio utile che dovrebbe controllare il loro nome utente. Puoi fornire una pagina più sicura mostrando lo stesso messaggio di errore quando il nome utente non viene trovato e quando la password non corrisponde alla password per l'utente specificato. Il messaggio dovrebbe indicare che la combinazione di nome utente e password non era corretta, per consentire all'utente di verificare entrambe le informazioni, non solo l'una o l'altra.
Se il tuo sito utilizza le e-mail per il nome utente di accesso, un utente malintenzionato può facilmente convalidare se un utente ha un account sul servizio se viene restituito un messaggio diverso per un accesso sconosciuto rispetto a una combinazione di nome utente e password non riuscita. Rende le cose un po 'meno convenienti per l'utente, ma la sicurezza aggiunta è normalmente il miglior compromesso.
Come notato, togliendo il messaggio specifico per un nome utente non valido, aumenta la sicurezza per un'esperienza utente peggiore. Fornire un messaggio che un login non esiste aiuterà l'utente a notare errori di battitura come la digitazione John
invece di jon
Più facile. Quel messaggio aiuta anche un utente che non ricorda quale username hanno usato sul tuo sito. Tieni presente che questi tipi di messaggi offrono agli hacker un modo semplice e semplice per verificare se un utente esiste sul tuo sito.
Puoi anche aiutare a sventare un hacker gestendo meglio i molteplici tentativi di accesso. L'errata digitazione errata di un nome utente o di una password più di una volta avviene in modo abbastanza comune da un carattere errato, trasposto due caratteri o utilizzando la password per un altro sito anziché la password corretta. Consentendo un numero illimitato di tentativi di accesso si apre la porta a un attacco di forza bruta di tentativi ripetuti di username e password per determinare il login corretto. Strumenti e script automatizzati accelerano il processo consentendo a un hacker di lavorare metodicamente attraverso molte potenziali password, fino a trovare il login corretto.
L'introduzione di un ritardo crescente dopo ogni tentativo di accesso fallito aiuta anche a sventare gli hacker. Il primo tentativo di accesso avviene normalmente. Il secondo login viene ritardato di una frazione di secondo prima di restituire il risultato. Ulteriori tentativi vengono ritardati sempre più a lungo prima di restituire una risposta. Questo ritardo consente interruzioni minime per un utente legittimo che ha commesso un errore, ma rallenta l'hacker che tenta di forzare il sito con forza.
Per dati più sensibili, un approccio più forte può essere preso bloccando l'account dopo un numero di tentativi falliti. Il blocco dell'account lo disabilita temporaneamente o definitivamente. Il blocco blocca gli attacchi a forza bruta come dopo un punto, il login non funzionerà. Una disattivazione temporanea dovrebbe avere un impatto minimo sull'utente finché viene visualizzato un messaggio per il motivo del blocco. Un blocco permanente richiede all'utente di contattare il supporto per risolvere il problema e si adatta meglio agli accessi, proteggendo i dati importanti.
Le password sono l'aspetto più sensibile del login. Non memorizzare mai le password in testo semplice. Mai. Mai. Ciò significa che quasi tutti i problemi di sicurezza possono esporre le informazioni di accesso. Anche le password crittografate dovrebbero essere evitate come se l'hacker ottenga l'accesso ai dati crittografati, il processo di decrittografia può essere molto più semplice. Qualsiasi archivio in cui è possibile recuperare una password, rende più semplice per un hacker fare lo stesso.
Le password devono essere memorizzate salate e hash. Un sale è un valore univoco generato in modo casuale, memorizzato per ogni accesso e aggiunto prima dell'hashing. L'aggiunta di sale impedisce che password identiche abbiano lo stesso hash e impedisce a un hacker di creare in anticipo un elenco del risultato dell'hash di possibili combinazioni di password. Aggiungendo l'hash casuale, una password di abc123
(si prega di non utilizzare mai nulla di simile come una vera e propria password) comporterà un hash diverso per ogni utente.
Una funzione hash trasforma la password in un valore di lunghezza fissa. Ci sono funzioni specificamente progettate per password come PBKDF2 o Bcrypt. I processori GPU in moderne schede grafiche possono eseguire i calcoli necessari all'hash e al can rompere molti algoritmi deboli rapidamente. Le macchine dedicate allo scopo di violare le password possono determinare una password di otto caratteri o inferiore, in meno di sei ore.
Gli utenti tendono spesso a riutilizzare la stessa password per la maggior parte dei siti in cui dispongono di account. Molti siti hanno iniziato a testare le credenziali esposte dai principali accessi degli account con i propri login e contattare gli utenti le cui combinazioni di nome utente e password corrispondono. Evernote e Facebook hanno recentemente esaminato le credenziali di accesso rilasciate da Adobe e hanno avvisato gli utenti che utilizzavano le stesse credenziali.
Il modo più semplice per gestire correttamente le password consiste nell'utilizzare gli strumenti inclusi nel framework web. La sicurezza delle password è complicata e ottenere solo una cosa sbagliata può lasciare le password degli utenti aperte agli attacchi. pH pass fornisce una libreria di dominio pubblico per PHP usando Bcrypt. I vecchi provider di appartenenza .NET hanno utilizzato gli hash più deboli, ma i nuovi provider Universal utilizzano PBKDF2. Rails fornisce anche una gemma Bcrypt.
Quando si proteggono correttamente le password in modo che non possano essere recuperate, si perde la possibilità di fornire all'utente una password dimenticata. Quindi, è necessario fornire un modo alternativo per un utente che ha legittimamente dimenticato la propria password per reimpostare la password in modo sicuro.
Una buona pagina di reimpostazione della password consente all'utente di modificare la password senza conoscere la password corrente. Il metodo tradizionale consente all'utente di inserire il proprio indirizzo email e quindi di inviare un collegamento a una pagina Web che consente loro di reimpostare la password. L'invio di un collegamento è più sicuro dell'invio di una password poiché la nuova password non viene creata finché l'utente non accede alla pagina. L'invio di una nuova password via e-mail creerebbe una nuova credenziale che chiunque intercettasse l'e-mail sarebbe in grado di utilizzare senza che l'utente ne fosse a conoscenza. Se qualcuno intercetta l'e-mail e reimposta la password, l'utente saprà quando accedono e tenterà di reimpostare la propria password.
Una buona pagina di ripristino non dovrebbe inoltre fornire la convalida dell'esistenza di un account. La logica è la stessa che abbiamo discusso in merito alla mancata fornitura di feedback se un account non esisteva durante l'accesso. Anche se il login non esiste nel sistema. L'approccio migliore è quello di fornire un messaggio che le istruzioni sono state inviate all'indirizzo e-mail su file. Dovresti comunque inviare un'email all'indirizzo email inserito poiché potrebbe essere un caso legittimo di aver dimenticato quale indirizzo email è stato utilizzato per un account, ad esempio inserire un'e-mail di lavoro anziché un'email personale.
Il collegamento per reimpostare le password deve essere progettato in modo che la richiesta di ripristino abbia una durata limitata e possa essere utilizzata una sola volta. Creare un token univoco per ogni richiesta di ripristino, legata all'account richiesto e memorizzarla in un database. Questo token diventa parte dell'URL inviato per reimpostare la password. Anche il token dovrebbe essere assegnato un tempo di scadenza ed essere rimosso dopo il reset completo. Se qualcuno tenta di utilizzare un token che è già stato utilizzato o è scaduto, la richiesta fallirebbe. Il tempo di scadenza deve essere sufficientemente lungo da consentire la ricezione dell'e-mail e l'utente di completare l'azione, ma non tanto da consentirne l'utilizzo in futuro. Di solito sarà sufficiente un intervallo di poche ore.
Reimpostare una password tramite e-mail rende inoltre la sicurezza del sito dipendente dall'integrità della posta elettronica dell'utente. Se è possibile accedere all'e-mail, quella persona può reimpostare la password. I siti possono aggiungere domande di sicurezza a cui è necessario rispondere prima di reimpostare la password. Le domande di sicurezza forniscono poca sicurezza in più se le risposte sono facili da trovare. Una domanda di sicurezza di "Qual è la mia città natale?" fornisce poca sicurezza se la risposta può essere trovata sul profilo Facebook della persona. Per ulteriori informazioni sullo sviluppo di buone domande, consultare http://goodsecurityquestions.com/.
Un login e una password richiedono solo una coppia di informazioni per accedere a un sito web. Quando vengono fornite tali informazioni, si presume che l'utente sia la persona corretta. Per rendere meno efficaci le credenziali di furto, è possibile aggiungere un secondo passaggio al processo di autenticazione. Oltre a qualcosa che l'utente conosce (il nome utente e la password), l'utente deve anche utilizzare qualcosa che ha nel suo attuale possesso, comunemente un cellulare tramite SMS o un'applicazione per questo scopo.
Le banche sono state probabilmente le prime a implementare questo processo utilizzando l'hardware personalizzato per generare un codice dipendente dal tempo. Google ha reso popolare l'uso di SMS o di un'app come secondo passo. Molti siti ora utilizzano un accesso compatibile con l'implementazione di RFC 6238 di Google. È possibile trovare le librerie che già implementano questa tecnica per i framework più popolari come ASP.NET, ASP.NET # 2, Ruby on Rails, PHP e Django.
Per evitare questi problemi hai un'altra opzione, lascia che qualcun altro si occupi di tutto questo integrandosi con una terza parte per l'autenticazione come Twitter, Facebook o OpenID. Ciò offre vantaggi e svantaggi. Elimina la maggior parte dei problemi di sicurezza di cui discutiamo qui mentre qualcun altro si occupa di questi problemi. Tuttavia, questi altri siti sono probabilmente anche un target di hacker più grande di te. Se utilizzi un altro sito per gestire l'autenticazione, se tale accesso viene compromesso, gli hacker hanno accesso al tuo sito.
L'utilizzo di una terza parte conosciuta può aiutare e ferire da una reputazione e da un punto di vista sociale. Il vantaggio di consentire il login con Facebook o Twitter è che così tanti utenti hanno già account lì che sarebbero felici di usarlo. Altri visitatori possono vedere l'integrazione con questi siti come una caratteristica negativa e non utilizzare il tuo sito a causa di esso o se è l'unica opzione fornita a loro.
L'accesso dell'applicazione Web svolge un ruolo fondamentale per la protezione del sito. Fare attenzione a proteggere il tuo login farà molto per proteggere il tuo sito, gli utenti del tuo sito e le loro informazioni private. Per lavorare in sicurezza con gli accessi, ridurre al minimo la quantità di dati che le pagine di accesso e di reimpostazione della password potrebbero potenzialmente fornire a un hacker. Inoltre, mettere in atto misure di sicurezza per rendere più difficile indovinare le password dell'utente tramite la forza bruta.
La protezione delle password è una preoccupazione critica di qualsiasi sito. Le password scarsamente protette rendono più facile il lavoro degli hacker e possono terminare con le credenziali di accesso del tuo sito esposte al pubblico. L'uso di password hash e salate rende il lavoro dell'hacker molto più difficile. Inoltre, l'aggiunta dell'opzione di un secondo passaggio alla procedura di accesso può fornire una maggiore protezione per gli utenti del tuo sito. Puoi anche scegliere di utilizzare una terza parte per gestire gli accessi al tuo sito.