Sarà necessario memorizzare la password e-mail dell'utente in una forma recuperabile. Puoi ancora criptare le password, ma non puoi cancellarle.
Memorizzare le password degli utenti in forma recuperabile comporta alcuni rischi per la sicurezza. Se il database delle password utente è mai trapelato, hai una grave violazione della sicurezza. Tuttavia, questa è solo la natura del tuo servizio. Le persone normalmente consigliano l'hashing per cercare di mitigare questo rischio, ma dal momento che non puoi usare l'hashing della password nella tua particolare applicazione, dovrai usare altre misure per mitigare il rischio.
Ecco la mia raccomandazione su come farlo nel modo più sicuro possibile. Configura una macchina (o VM) separata che viene utilizzata esclusivamente ai fini della gestione delle password e-mail. Esegue un servizio - chiamiamolo il servizio di password-keeper - che espone alcune semplici API:
-
Registra account IMAP. Il chiamante fornisce informazioni su un account di posta elettronica, ad esempio nome utente e password. Il tuo servizio di password-keeper memorizza queste informazioni.
-
Leggi email. Il chiamante identifica un account IMAP precedentemente registrato con il servizio. Il tuo servizio di password-keeper cerca il nome utente e la password per l'account IMAP, si connette al server IMAP e autentica su di esso, scarica qualsiasi nuova e-mail e restituisce i messaggi e-mail desiderati al chiamante.
Questo servizio di password-keeper è come un Hotel California per le password e-mail: le password entrano, ma non se ne vanno mai. Il servizio di password-keeper è responsabile per la memorizzazione delle password nel modo più sicuro possibile, e mai per esporle ad altri. Potrebbe memorizzare le password in un database separato, crittografato con una chiave speciale. La chiave di crittografia potrebbe essere archiviata in un file di configurazione accessibile a questo servizio, ma non a nessun altro. Il servizio di password-keeper ora può controllare l'accesso agli account di posta elettronica dei tuoi utenti. Ad esempio, può eseguire la registrazione protetta (in modo da poter rintracciare le intrusioni), limitare la velocità (per ridurre l'impatto di una violazione degli altri sistemi) o altre protezioni. Puoi anche bloccare chi o cosa può accedervi.
Ora, scrivi al resto del tuo sistema come cliente del servizio di password-keeper. Configura il servizio di password-keeper in modo che sia accessibile solo al tuo codice (e non al pubblico) e utilizzi un'autenticazione strong per la connessione del tuo codice. Assicurati di non memorizzare mai le password e-mail degli utenti in nessun'altra parte del tuo sistema. Quando l'utente fornisce una password di posta elettronica all'applicazione, è necessario richiamare immediatamente l'API "Registra account IMAP del servizio password", passare la password ed eliminare tutte le altre copie della password.
Questo non fornisce una protezione perfetta, ma ti offre un posto dove stare: un modo per ottenere la massima protezione possibile, per le password degli utenti. Con questo tipo di approccio e una certa diligenza, penso che tu possa fornire un livello ragionevole di sicurezza ai tuoi utenti.