【问题标题】:See any security risks with this approach?看到这种方法有任何安全风险吗?
【发布时间】:2012-09-18 01:57:35
【问题描述】:

我正在开发具有以下身份验证样式的 RESTful(ish) API:

  • 客户端调用“身份验证”API 方法并通过 HTTPS POST 传递用户名和密码。此方法返回基本帐户信息和一个“客户端令牌”,该令牌存储在数据库中的用户帐户上。

  • 所有进一步的 API 调用(全部通过 HTTPS POST)都需要客户端令牌。如果系统无法通过客户端令牌找到请求者,则调用被拒绝。

我的未解决问题是: 1) 有没有人认为这是一个重大的安全问题? 2)我应该让客户端令牌随着时间的推移过期或更改有什么好的理由吗?现在我为每个用户分配一个随机的。如果用户注销或忘记密码,我会生成一个新的。

我很想知道大家对这种方法的看法。我不追求创新,我只是让我意识到这种方法的风险。

【问题讨论】:

    标签: security authentication


    【解决方案1】:

    您所描述的内容在功能上等同于会话 cookie,只是在您的应用程序中重新实现,因此存在许多可能已经被大多数 Web 框架处理过的陷阱。

    • 确保您的令牌有足够的熵。如果标记是简单的 32 位整数,那么疯狂的猜测可能足以猜到其他人正在使用的标记。
    • 如果您是随机生成这些令牌,请确保您使用加密性强的随机数源,否则下一个令牌可能会根据之前的令牌进行猜测。
    • 如果这些 POST 请求来自脚本并且嵌入在网页中,则将令牌作为显式参数而不是作为声明的 cookie 传递 securehttponly 会通过跨站点脚本窃取令牌容易得多。

    【讨论】:

    • 嗨,杰弗里 - 很棒的建议。客户端令牌基本上是通过 sha1($user_id . time() . $secret_salt) 制作的,因此不可能随机猜测一个。跨站点脚本是一个问题。我将不得不调查安全 cookie - 我从未听说过。我将不得不调查 PhoneGap 是否支持 cookie。感谢您的提示!
    • @Anthony 用户 ID 和“秘密盐”是什么样的?后者是固定值吗?
    • 附带说明,如果应用程序很复杂或者您最终在不同的域中使用令牌,使用 http 标头传输令牌与参数相比具有一定的优势,并且可以缓解一些安全问题(例如,防止将 self xss 变成完整的 xss)。还要小心日志,因为参数比标头或 cookie 更有可能最终出现在此处
    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多