gpt4 book ai didi

language-agnostic - 揭开 Web 身份验证的神秘面纱

转载 作者:行者123 更新时间:2023-12-04 01:09:45 25 4
gpt4 key购买 nike

我目前正在研究我正在开发的网站的用户身份验证协议(protocol)。我想创建一个身份验证 cookie,以便用户可以在页面之间保持登录状态。

这是我的第一个 bash:

cookie = user_id|expiry_date|HMAC(user_id|expiry_date, k)

其中 k 是 HMAC(user_id|expiry_date, sk) sk 是只有服务器知道的 256 位 key 。 HMAC 是一个 SHA-256 哈希。请注意,“|”是一个分隔符,而不仅仅是串联。

这在 PHP 中看起来像这样:
$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;

我可以看到它很容易受到安全 Cookie 协议(protocol)中所述的重放攻击,但应该能够抵抗卷攻击和加密拼接。

问题:我在这里是正确的,还是我错过了一个巨大的漏洞?有没有办法防御使用动态分配的 IP 地址且不使用 session 的重放攻击?

笔记

我读过的最新 Material :
Web 上客户端身份验证的注意事项
又名傅等人。
( https://pdos.csail.mit.edu/papers/webauth:sec10.pdf)

安全 Cookie 协议(protocol)
又名刘等人。
( http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf)
它扩展了以前的方法

强化无状态 session Cookie
( http://www.lightbluetouchpaper.org/2008/05/16/hardened-stateless-session-cookies/)
这也扩展了以前的方法。

由于这个主题非常复杂,我只是在寻找具有创建和破坏身份验证方案的实际经验的安全专家的答案。

最佳答案

一般来说这很好,我在多个应用程序中做了类似的事情。它不会比 session ID 更容易受到重放攻击。您可以使用 SSL 保护 token 不被泄露以进行重放,就像您对 session ID 所做的一样。

小建议:

  • 在您的用户数据中放置一个字段,该字段会在更改密码时更新(可能是密码生成计数器,甚至只是随机盐),并将该字段包含在 token 和签名部分中。然后,当用户更改密码时,他们也会使任何其他被盗 token 无效。如果没有这个,您将受到限制,您可以合理地允许 token 在到期前存活多长时间。
  • 将方案标识符放在 token 和签名部分中,以便 (a) 您可以为不同目的使用不同类型的 token (例如,一种用于身份验证,一种用于 XSRF 保护),并且 (b) 您可以使用更新机制新版本,而不必使所有旧 token 无效。
  • 确保 user_id永远不会重复使用,以防止使用 token 来访问具有相同 ID 的不同资源。
  • 管道分隔假定 |永远不能出现在任何字段值中。这可能适用于您(可能)处理的数值,但您可能在某些时候需要更复杂的格式,例如 URL 编码的名称/值对。
  • 双 HMAC 似乎并没有真正让你受益。根据目前的理解,针对 HMAC-SHA256 的蛮力和密码分析已经非常困难。
  • 关于language-agnostic - 揭开 Web 身份验证的神秘面纱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000184/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com