在会话中存储密码哈希.好主意?

Ch3*_*33f 0 php apache security session

总结问题

在会话中存在或反对保存密码哈希的参数是什么?

理念

在登录时在会话中存储密码哈希(在数据库中),并在每次访问时根据数据库哈希对其进行验证,以便自动使密码更改的所有会话无效.

我的想法

这些是我到目前为止关于这个主题的想法.

  • 假设两个人合法地共享一个帐户,它(大多数时候)会阻止一种竞争条件,即在另一个登录时更改密码.混淆只会发生一次而不是两次.
  • 假设存在恶意攻击,如果及早发现,合法用户可以将攻击者踢出.

精读

  • 如果人员A在B人员更改密码后立即提交表格,则可能存在数据.
  • 假设恶意攻击,攻击者可以踢出合法用户.

中性

  • 没有真正的性能影响.(编辑:因为我出于其他原因加载了每个页面加载的用户信息.)
  • 安全问题几乎不存在.如果某人有权访问服务器,则访问具有所有哈希值的数据库的工作量与访问会话存储的工作量相当,后者具有登录用户的哈希值.

请回答和评论

我不想在这里开始主观讨论.我想收集(尽可能客观)该主题的利弊.我还没有考虑过什么?

编辑:

澄清:使所有会话无效(除了用于更改密码的会话)的想法来自于"如果一个人更改密码而没有告诉某些其他人有这样的原因,那么他们应该立即失去访问权限". ,假设没有恶意用户(这将是一个多么美妙的世界......).

dec*_*eze 6

  1. 同时更改密码的场景听起来非常罕见,而不是构建会话架构的核心前提.使用乐观锁定和其他并发解决方案也可以更好地防止这种情况.
  2. 当密码明确更改时,您可以使会话无效,您不需要在会话中存储密码.如果您使用数据库来存储会话(最好是像Redis或memcached这样的内存数据库),这是微不足道的,但使用标准的基于PHP文件的会话并非不可能.只需在密码更改完成后主动核对给定用户的所有活动会话.
  3. 密码是一个秘密,应该尽可能地保持流通.哈希只是这个秘密的影子,但即便如此,你应该保守秘密.将它存储在会话中比将其纯粹保存在数据库中时更容易泄漏.
  4. 还有就是在每一个页面加载执行数据库查询的性能影响.