我正在编写的一个特定的 Web 服务与 API 接口。每个 API 调用都需要发送用户的用户名和密码,不维护任何状态。
理想情况下,当使用我的网络服务时,用户将输入他的 API 用户名和密码一次,我的网络服务将存储该信息直到会话结束。我了解出于安全考虑,我不应该使用 PHP 会话存储 API 密码,也不应该将其存储在数据库中。因此,如何在会话期间安全地存储和访问密码?
加密密码、将加密密码存储在 cookie 中、将加密密钥存储在会话中是否安全?
请注意,我最初在 SO 上问了这个问题(没有提出的解决方案):https : //stackoverflow.com/questions/15084025/storing-third-party-passwords-for-reuse-across-pages 如果我先喝咖啡,我会知道在这里而不是那里发帖。SO帖子可以删除,但我不能。
那里给出的答案是我现在在生产中使用的那个,所以如果方法中存在缺陷(在 PHP 会话中存储加密密码,在 cookie 中存储加密密钥),那么我非常想知道。
$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);