Un particolare servizio Web che sto scrivendo si interfaccia con un'API. Ogni chiamata API richiede l'invio del nome utente e della password dell'utente, nessun stato viene mantenuto.
Idealmente, quando si utilizza il mio servizio web l'utente inserirà il suo nome utente e password API una volta, e il mio servizio web memorizzerà tali informazioni fino alla fine della sessione. Capisco che non dovrei memorizzare la password dell'API utilizzando le sessioni PHP né in un database a causa di problemi di sicurezza. Pertanto, come posso archiviare in modo sicuro e accedere alla password per la durata della sessione?
Sarebbe sicuro crittografare la password, memorizzare la password crittografata in un cookie e la chiave di crittografia in una sessione?
Si noti che inizialmente avevo posto la domanda (senza la soluzione proposta) su SO: link Se avessi bevuto il caffè prima, avrei saputo postare qui invece che lì. Il post SO può essere eliminato, ma non da me.
La risposta data è quella che sto usando in produzione, quindi se ci sono difetti nell'approccio (memorizzare la password crittografata nella sessione PHP, la chiave di crittografia nel cookie) allora mi piacerebbe molto sapere.
$encryptionKey = sha1(microtime(true).mt_rand(PHP_INT_MAX / 10, PHP_INT_MAX));
$encryptedPassword = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryptionKey, $password, MCRYPT_MODE_CFB);
setcookie('atwood', $encryptionKey, 0);
$_SESSION['encryptedPassword'] = $encryptedPassword;
$password = mcrypt_decrypt(MCRYPT_BLOWFISH, $_COOKIE['atwood'], $_SESSION['encryptedPassword'], MCRYPT_MODE_CFB);