【问题标题】:User Authentication with Cookies Only仅使用 Cookie 的用户身份验证
【发布时间】:2014-04-27 08:38:16
【问题描述】:

我计划仅使用 cookie(而不是会话)来验证我网站私有部分的用户。我希望用户无限期地保持登录状态,除非他们自己注销。它将像这样工作:

1. 成功登录后,我会生成一个随机哈希并将其作为 HTTP cookie 存储在用户身上(使用 SSL)。我还将哈希以及用户 ID 和用户设备存储在我的数据库中。

2. 每当请求新页面时,我都会检查用户是否有 cookie。如果他有我得到哈希并在我的数据库中搜索它。如果我找到匹配项并且设备相同,我假设它是用户并提供页面。如果我找不到哈希或设备已更改,我假设它不是用户并再次要求登录。

我的问题:这种方法在安全方面可以接受吗?我不明白为什么这比使用会话(在两种情况下都保持用户登录)更不安全,因为最终风险是相同的,即让攻击者发现哈希来冒充用户。我的防御措施是跟踪用户设备,因此攻击者需要发现哈希并拥有相同的设备。

感谢您的反馈。

【问题讨论】:

    标签: authentication cookies


    【解决方案1】:

    您所描述的基本上是大多数语言/框架提供的会话功能。

    只要确保您的哈希值不使用用户登录的时间作为熵的来源,即。不要使用 h(username + login_time),因为如果攻击者知道大概的登录时间,这很容易被暴力破解。

    您实际使用的是什么语言/框架?您会发现在大多数情况下,可以选择将会话“功能”与持久性 cookie(而不是会话)一起使用,这样可以避免您从头开始实施此功能,并可能会产生额外的安全问题。

    【讨论】:

    • 感谢您的评论。我将在 PHP 中创建自己的框架,因为我需要的功能很少(身份验证就是其中之一)。这也是沿途学习的东西。我知道,如果我想更安全,我应该使用已建立的框架,因为它可能会解决这些问题。
    • 公平地说,这也是在 PHP 中实现内置会话功能的方式。如果您将 cookie_lifetime 设置为 0 以外的值,它将使用持久 cookie 而不是会话:php.net/manual/en/… 此外,如果您需要 MVC 框架的一些但不是所有组件,我建议您将组件从禅。我主要不使用 Zend,但是当我需要在遗留代码库中实现缓存或会话管理等功能时,我通常会发现集成 Zend 组件非常容易。
    • 我不知道我可以单独使用 Zend 组件。我去看看,谢谢。
    • 你当然可以,这里有一个简短的介绍:slideshare.net/shahar/…
    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多