【发布时间】:2021-04-14 16:26:10
【问题描述】:
这个想法是加密包含会话数据(用户名和令牌到期)的字符串并将其存储在 cookie 中。每当 HTTP 请求通过客户端时,它会检查它是否可以解密 cookie 中的令牌,然后查询数据库以检查用户名是否存在并被允许访问目标资源以及是否尚未过期:
// create token
$token = openssl_encrypt($username . "::" . $expiry, "rc2-40-cbc", $key, 0, "00000000");
// then store in cookie
'::' 只是一个分隔用户名和有效期的分隔符。
// on http request, verify token
$decryptedToken = openssl_decrypt($token, "rc2-40-cbc", $key, 0, "00000000");
if($decryptedToken != false) // token is valid
// extract data
$tokenValues = explode("::", $token);
$username = $tokenValues[0];
$tokenExpiry = $tokenValues[1];
// then validate username and expiry
这样安全吗?
【问题讨论】:
-
只要不暴露加密
$key就是安全的。 -
为什么要放一些有被解密风险的东西。生成一个密码安全的令牌,让服务器跟踪到期并将令牌与用户、用户的 IP 地址以及您可能选择跟踪的其他功能联系起来。
-
openssl_encrypt 是否足够安全,可以创建会话令牌? 当然可以,但正如 Gabor 指出的那样,您使用它非常糟糕。
标签: php security encryption cryptography session-cookies