作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在研究我正在开发的网站的用户身份验证协议(protocol)。我想创建一个身份验证 cookie,以便用户可以在页面之间保持登录状态。
这是我的第一个 bash:
cookie = user_id|expiry_date|HMAC(user_id|expiry_date, k)
HMAC(user_id|expiry_date, sk)
sk 是只有服务器知道的 256 位 key 。 HMAC 是一个 SHA-256 哈希。请注意,“|”是一个分隔符,而不仅仅是串联。
$key = hash_hmac('sha256', $user_id . '|' . $expiry_time, SECRET_KEY);
$digest = hash_hmac('sha256', $user_id . '|' . $expiry_time, $key);
$cookie = $user_id . '|' . $expiry_time . '|' . $digest;
最佳答案
一般来说这很好,我在多个应用程序中做了类似的事情。它不会比 session ID 更容易受到重放攻击。您可以使用 SSL 保护 token 不被泄露以进行重放,就像您对 session ID 所做的一样。
小建议:
user_id
永远不会重复使用,以防止使用 token 来访问具有相同 ID 的不同资源。 |
永远不能出现在任何字段值中。这可能适用于您(可能)处理的数值,但您可能在某些时候需要更复杂的格式,例如 URL 编码的名称/值对。 关于language-agnostic - 揭开 Web 身份验证的神秘面纱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000184/
我是一名优秀的程序员,十分优秀!