首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于这种持久化登录的方法,我应该注意到的任何问题(“记得我”)?

对于这种持久化登录的方法,我应该注意到的任何问题(“记得我”)?
EN

Stack Overflow用户
提问于 2012-10-20 15:12:23
回答 1查看 735关注 0票数 2

这个web应用程序将有一个数据库表,列有uniqueid (64位int自动增量字段;key)、令牌(64字节二进制字段)和一个accountid。

使用“记住我”登录后,将生成一个随机令牌。然后,将此令牌的SHA-512散列插入数据库,并检索生成的uniqueid。包含唯一和未散列令牌的cookie被发送到客户端。

每次用户使用cookie访问页面时,cookie的唯一性及其令牌的SHA-512散列都会根据数据库进行检查。如果有一行与唯一性匹配,而该行的令牌哈希与令牌哈希匹配,则使用该行的accountid登录用户。cookie每次尝试身份验证之后,删除使用旧的uniqueid的行,如果身份验证成功,则生成一个新的随机令牌。然后,将此令牌的SHA-512散列插入数据库,并检索生成的uniqueid。包含唯一和未散列令牌的cookie被发送到成功验证的客户端。

我也将使用所描述的这里技术。所有失败的cookie身份验证都会将cookie设置为空白值和过期日期,设置为过去的某个时间。

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

  1. 数据库中的令牌被散列,这样只要攻击者没有对数据库的写访问权限,他/她就不能伪造所有用户的cookie。
  2. 使用唯一的ID代替用户的帐户名,因为登录凭据永远不应该存储在cookie中。
  3. 每次对cookie进行身份验证时都会生成一个随机令牌,以便如果攻击者窃取了cookie,则该令牌将仅在用户下次登录之前才有效,而不是整个用户被记住的时间。
  4. Cookie将很难嗅到,因为我的整个应用程序都使用HTTPS。

我可以通过允许用户指定他/她想要被记住的时间来进一步增强安全性。过期日期将存储在存储唯一in和令牌的同一个数据库表中。每次创建新cookie时,此过期时间都将随cookie一起发送。如果用户尝试使用服务器认为过期但客户端仍然持有的cookie登录,则将拒绝登录。

我相信这个解决方案是相当安全的,但是当我设计这个方法时,是否有我忽略的缺陷或事情呢?

资料来源:

数据库中的哈希令牌

不要在cookie中存储帐户名,每次验证后使用新的唯一id

EN

回答 1

Stack Overflow用户

发布于 2012-10-20 16:36:04

说到安全,合理总是相对的。::如果你认为相对于你所面临的威胁来说,这是合理的。尽管如此,如果它是我的应用程序,我会做一些事情,我相信我实际上需要保护它免受攻击……

  • 在令牌/ b/e上盖章,允许您将其与原始身份验证事件关联起来,然后将其记录到所有cookie操作中。这样,如果(时间:)有人被黑客攻击,并且你想知道什么时候发生了什么,你就可以进行关联。
  • 在b/e上,确保将“使所有未使用的令牌失效”作为系统的一个功能。然后自动将其连接到所有“可疑”事件。
  • 将地理信息存储在cookie /与cookie对应的行的b/e中。从记录开始。最终你会想要做的更多。当你研究那些被黑客攻击的人时,你会发现越来越多的东西可以用来处理这些数据。如果你没有数据,你就无法学习。
  • 很多乐器。很多很多乐器。留几年吧。每件事都会得到一个事件,当它发生时,记录你在事件中所知道的一切。良好的可视化/查找工具,您可以使用这些工具来了解什么时候发生了什么。

当然,你还可以做更多的事情,这只是一个开始的清单.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12989778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档