gpt4 book ai didi

php - 我的访问 token 策略是好的做法还是容易受到攻击?

转载 作者:行者123 更新时间:2023-11-29 11:51:00 24 4
gpt4 key购买 nike

  • 我正在为我的实时网络应用程序开发API,以使其与移动应用程序配合使用。
  • 我希望用户的数据可供通过移动应用访问/修改。
  • 为了避免每次访问用户数据时都向服务器发送用户凭据,我将实现访问 token 。

那又怎样?.. 我不会将生成的访问 token 详细信息(例如user_id、expiry_time、user_ip 等)存储在数据库中,而是将它们存储在访问 token 中本身。因此,我可以避免每次用户请求更新时都进行数据库查询。

我正在考虑以下 API 策略:

  • 最初,移动应用程序向用户询问用户电子邮件密码,并向 API 服务器发送请求以获取访问权限 token 。
  • API 服务器根据数据库表检查用户凭据。
  • 如果用户存在,
    • 收集user_id、时间戳、user_ip 等,
    • 使用上述数据格式化逗号分隔的字符串。(或url_encode?)
    • 加密使用加密 key (我保证安全)以逗号分隔的字符串< em>Mcrypt 库
    • base64_encode加密数据并将其作为访问 token 返回
  • 移动应用程序会存储此返回的 token 以供以后使用。
  • 来自应用程序的进一步请求将通过 token 发送。
  • 当API Server收到带有Token的访问请求时,
    • 使用相同的加密 key 解密 token 。 (因此,我们将得到相同的逗号分隔字符串)
    • 解析解密的分隔字符串。我们将获取 user_id、时间戳、user_ip
    • 直接使用,
      1. user_id 获取相应的用户数据。
      2. 时间戳用于检查 token 是否过期。
      3. user_ip 决定允许/拒绝用户 IP 地址更改。

如果加密失败,我们可以将其视为无效的访问 token 。

优点: 每次用户请求新数据时都不需要数据库查询。因此,节省了时间和资源。

我没有发现这种方法有任何漏洞/问题。那就是我在这里!请提供您的宝贵反馈!

注意: 我不知道这是否是访问 token 工作的常见方式。抱歉,如果是的话。

最佳答案

不要将可逆加密交给用户。您需要为所有用户使用相同的加密 key ,这意味着您拥有一个非常非常 secret 的 key ,您必须确保该 key 保密。如果此 key 泄露,任何用户都可以通过重新创建您的 token 方案并选择任意用户 ID 来体现任何其他用户。由于您将密码数据交给用户,他们可以轻松地对其进行离线攻击(例如,只需尝试数据上的任何和所有 key 组合,直到成功解密)。一旦 key 以这种方式被发现,除了更改 key 之外,您没有其他办法。

相反,请使用专门设计的哈希,以将此类暴力攻击的速度减慢至在实践中变得不可能的程度。使用签名 token 来实现这一点。这意味着,您使用相同的信息(用户 ID、IP、时间戳),添加一个随机生成的值,使用您的 key 对所有这些进行哈希处理,然后发送除 key 之外的所有这些信息给用户。

// user_id,ip,timestamp,random_token,hash
42,127.0.0.1,12345678,oiawd8juht4mp9384,q209c8yqc23n09rhcq823n9t87q432hnq9493q784gth

这些信息都可以是明文的,因为它本身是没有意义的,而且是通过哈希来验证的,没有 key 就无法伪造。为此,请使用昂贵的 HMAC hash

关于php - 我的访问 token 策略是好的做法还是容易受到攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34062417/

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