Come memorizzi la password? Con molta attenzione .
In particolare, ti suggerisco di usare un'architettura speciale:
-
Configura una macchina separata, che esisterà solo per la memorizzazione delle password in chiaro. Dovrebbe essere indurito e bloccato il più saldamente possibile. È necessario limitare il numero di amministratori con accesso a questo server. E questo server dovrebbe essere usato solo per questo scopo. Chiamiamo questo "server di login".
-
Il server di login dovrebbe esportare una semplice API, con alcune funzioni: (a) aggiungere una nuova coppia nome utente / password per un sito Web all'archivio password e restituire un handle che lo identifica in modo univoco; (b) accedere al sito di terze parti utilizzando una particolare coppia nome utente / password (come specificato dall'handle), inviare una richiesta particolare e restituire la risposta; (c) cancellare una particolare coppia nome utente / password (identificata dall'handle). Le password devono essere memorizzate sul server di login (non su un database condiviso).
-
Si noti che non esiste alcuna API per esportare una coppia nome utente / password dall'archivio password. Questo è apposta. Il server di login dovrebbe funzionare come Hotel California per le password: le password entrano, ma non escono mai.
-
Il server di login dovrebbe conservare registri dettagliati di tutti gli usi delle sue password. Potresti anche volerlo avere un limite di velocità (ad esempio, notificare a un amministratore se il tasso di utilizzo supera una soglia). E si potrebbe desiderare di avere una garbage collection, in modo che se un nome utente / password non viene utilizzato entro 90 giorni, lo si cancella dall'archivio password, per limitare il numero di vecchie password memorizzate (all'utente può essere richiesto di ri inserisci il loro nome utente / password al prossimo accesso).
Questa architettura isola l'aspetto più critico per la sicurezza in un pezzo separato, il server di login, e cerca di mantenere la sua funzionalità il più semplice possibile, in modo da ridurre al minimo le vulnerabilità di sicurezza che potrebbero consentire l'accesso alle password degli utenti .
In secondo luogo, suggerisco di pianificare un ulteriore livello di revisione e test del codice, data la natura critica del server di accesso:
-
Chiedi a un secondo sviluppatore di rivedere tutto il codice per il server di accesso, per verificare che non contenga vulnerabilità di sicurezza.
-
Considera l'assunzione di qualcuno che esegua un pentest o una revisione del codice di sicurezza del server di login.
Anche se segui tutti questi passaggi, sei ancora soggetto a qualche rischio. Non c'è un proiettile d'argento. Se il server di login viene violato, verranno rivelate tutte le password dei tuoi utenti, il che è molto brutto. Pertanto, sii il più attento possibile.