

新闻资讯
技术学院单纯加密cookie中的用户id无法防止恶意篡改;真正安全的做法是使用服务端验证的随机令牌(如token或jwt),将敏感状态完全剥离客户端,仅通过不可预测、有时效性且绑定设备/会话的签名令牌完成身份延续。
在Web身份认证中,“记住我(Remember Me)”功能常被误用为直接存储用户ID(甚至明文)于Cookie中,再通过简单加密“掩人耳目”。但必须明确:Cookie始终由客户端控制,任何加密若未配合服务端强验证,都形同虚设。攻击者可轻易生成合法密文(如重放已知密文、暴力构造IV、或利用弱加密模式),绕过校验逻辑。
✅ 正确实践:采用“服务端有状态令牌”或“无状态签名令牌”两种主流方案:
re、SameSite=Strict的Cookie;// 示例:PHP生成与验证Remember-Me Token
$token = bin2hex(random_bytes(32));
$tokenHash = hash_hmac('sha256', $token, $_ENV['REMEMBER_TOKEN_SECRET']);
$stmt = $pdo->prepare("INSERT INTO remember_tokens (user_id, token_hash, expires_at) VALUES (?, ?, ?)");
$stmt->execute([$userId, $tokenHash, date('Y-m-d H:i:s', time() + 30 * 86400)]);
// 设置安全Cookie
setcookie('remember_token', $token, [
'expires' => time() + 30 * 86400,
'path' => '/',
'domain' => '.example.com',
'secure' => true,
'httponly' => true,
'samesite' => 'Strict'
]);JWT将用户ID、过期时间等信息编码并签名(非加密!),服务端仅需验证签名和时效性。关键点:
⚠️ 注意事项:
总结:安全的本质不在于“隐藏”,而在于“验证”与“不可伪造”。抛弃“加密ID”的直觉陷阱,拥抱服务端可控的令牌机制——这才是现代Web应用中“记住我”功能的可靠基石。