Quello che stai proponendo è molto pericoloso e contro le migliori pratiche di sicurezza. Uno dei problemi è che gli utenti tendono a riutilizzare le stesse password attraverso servizi diversi. Ciò significa che una password trapelata può portare alla vulnerabilità di molti dei loro account. (Ad es .: recente hack di Mark Zuckerberg ). Ciò si combina con il fatto che i contenuti del database a volte perdono a causa di difetti come l'iniezione SQL.
Per proteggere questi reuser delle password, i siti Web devono impegnarsi molto a proteggere i valori delle password in quanto una violazione rende vulnerabili molti siti.
Questo significa solo memorizzare le password in un formato sicuro e non reversibile. Puoi leggere la scienza su Come fare in modo sicuro le password di hash? , ma tu probabilmente è buono se usi bcrypt con i suoi parametri predefiniti.
Se si stava effettuando l'integrazione con un sito di terze parti che supportava solo l'autenticazione nome utente / password e il sito non era disposto a fornire un meccanismo di autenticazione sicuro, forse avrebbe senso archiviare le password per il sito remoto (dovrebbero essere crittografate in modo sicuro) quando non in uso). Ma tu sei il proprietario del sito remoto, quindi basta fare la cosa giusta e supportare un modello di login migliore delle password.
Alcune possibili strategie sono:
- OAuth (forse tramite OpenID ), SAML 2 o altro sistema esistente che supporta il single sign-on.
- Utilizzando Autenticazione reciproca SSL , site2 potrebbe generare certificati client al momento della registrazione e passarli a site1. Quindi una violazione del database di site1 espone solo certificati e non password dell'utente (ricorda che usano le stesse password per altri siti).
-
Impersonazione (forse qualcuno può aggiungere un riferimento migliore nei commenti?) funziona se c'è una strong fiducia modello tra site1 e site2. Fondamentalmente, se i siti hanno gli stessi autori e deployer, puoi consentire a site1 di dire semplicemente a site2 di fingere di essere chiamato da
JoeUser
senza credenziali. Site1 dovrebbe essere autenticato in modo sicuro su site2 per assicurarsi che gli utenti malintenzionati non possano utilizzare questa funzione.
- Chiedi all'utente di digitare la propria password site2 in site1 ogni volta che site1 ne ha bisogno.
Sono sicuro che ci sono più soluzioni, ma memorizzare le password in un formato reversibile (ad esempio: crittografato) non è una buona pratica. E memorizzare le password come testo in chiaro è imperdonabile.