Quindi, ho creato un sistema di autenticazione. L'ha versato per ogni tipo di falla nella sicurezza e ne ha testato la schifezza. Penso che sia abbastanza sicuro, ma c'è un aspetto "diverso" del suo design che non è il solito di un sistema di autenticazione web.
Fondamentalmente, volevo farlo in modo che l'autenticazione potesse essere eseguita senza tenere traccia della sessione di ciascun utente. Ciò significa meno carico sul database e banale scalabilità e cache. Ecco i "segreti" conservati dal server:
- Una chiave privata è conservata nel codice sorgente dell'applicazione
- Viene mantenuto un sale generato a caso per ogni utente
Per renderlo senza sessioni, ma non è facile creare i cookie, questo è il formato dei miei cookie
expires=expiretimestamp
secret=hash(privatekey + otherinfo + username + hashedpassword + expires)
username=username
(con otherinfo
come cose come indirizzo IP, informazioni sul browser, ecc. e con hashedpassword=hash(username + salt + password + privatekey)
La mia comprensione è che la creazione di cookie di accesso (non cracking delle password) richiede:
- Accesso al codice sorgente per l'applicazione, o un modo per ingannarlo per sputare la chiave privata
- Accesso in sola lettura al database per ottenere il sale e la password hash
Mentre il metodo di sessione tradizionale richiede:
- Scrivi e leggi l'accesso al database (per iniettare la sessione o ingannare l'app Web per farlo per te)
- Probabilmente l'accesso al codice sorgente dipende da come funziona
Ad ogni modo, questo sembra troppo insicuro per chiunque? Ci sono modi per migliorarlo e renderlo più sicuro (mantenendo il modello senza stato / senza sessioni)? Esistono sistemi di autenticazione esistenti che utilizzano questo modello stateless?
Inoltre, il metodo di hashing può essere praticamente qualsiasi cosa, da SHA256 a Blowfish