关于这种持久登录方法("Remember Me"),我应该注意的任何陷阱?



此Web应用程序将具有一个带有列的数据库表(64位int自动启动字段;键),令牌(64个字节二进制二进制字段)和一个帐户。

>

检查了"记住我"登录后,将生成一个随机令牌。然后,该令牌的SHA-512哈希将插入数据库中,并检索到生成的唯一形式。包含独特且未满足令牌的cookie发送给客户。

用户每次使用cookie,cookie的唯一IDID及其令牌的SHA-512哈希(SHA-512哈希)访问页面时,都可以使用数据库进行检查。如果有一行匹配唯一的IND,并且该行的令牌哈希匹配令牌哈希,请使用该行的帐户登录用户。在cookie进行的每次身份验证尝试之后,删除使用旧唯一的行的行,如果身份验证成功,则会产生一个新的随机令牌。然后,该令牌的SHA-512哈希将插入数据库中,并检索到生成的唯一形式。包含唯一且未解决的令牌的cookie已发送给成功身份验证的客户端。

我也将使用此处描述的技术。所有失败的cookie身份验证都将将cookie设置为空白值,并将到期日设置为过去的某个时候。

我相信这种方法会解决有关cookie的一些问题。即:

  1. 数据库中的令牌是哈希的所有用户。

  2. 使用唯一ID代替用户的帐户名称,因为登录凭证永远不应存储在cookie中。

  3. 每次对cookie进行身份验证时,都会生成一个随机令牌因此,如果攻击者窃取了cookie,则只有在用户接下来登录,而不是用户一直在记住。

  4. cookies很难嗅探,因为我的整个应用程序都使用https。

我可以通过允许用户指定他/她想被记住多长时间来进一步提高安全性。到期日期将存储在存储独特和令牌的同一数据库表中。每次创建新的cookie时,此期限都会与cookie一起发送。如果用户尝试使用服务器认为已过期但仍可持有的cookie登录,则登录将被拒绝。

我相信这个解决方案是合理安全的,但是当我设计此方法时,我是否有任何陷阱或我忽略的东西?

来源:

数据库中的哈希令牌

不要将帐户名称存储在cookie中,并在每个身份验证之后使用新的唯一ID

在安全性方面,合理是相对的。:)如果您认为这是合适的,而不是面临的威胁,那是合理的。也就是说,如果是我的应用程序,我会做的一些事情,我相信我实际上需要保护它免受攻击...

  • 在令牌/b/e中打印一些东西,使您可以将其与原始身份验证事件相关联,然后将其记录在所有cookie操作中。这样,如果(:)人们被黑客入侵,并且您想弄清楚发生了什么。
  • 在b/e上,确保您将"使我所有出色的令牌无效"作为系统的功能。然后将其连接到所有"可疑"事件中。
  • 将GEO信息存储在cookie/与cookie相对应的行中的b/e中。首先记录它。最终,您需要做更多的事情。当您研究被黑客入侵的人时,您会发现越来越多的数据可以使用这些数据。如果您没有数据,就无法学习。
  • 很多乐器。很多乐器。保留多年。一切都会得到一个事件,记录您在此事件发生时所知道的一切。良好的可视化/查找工具,您可以用来弄清楚。

当然还有更多的事情,您可以做,这只是一个入门列表...

最新更新