如何防止另一个用户重复使用密码哈希

How to prevent reuse of password hash by another user

我需要防止其他用户重复使用密码哈希, 例如,如果用户可以创建他的哈希(知道 curse 的密码) 如果他获得了对数据库的访问权限并用他的哈希值替换了其他人的哈希值,他将能够以该用户身份登录 我想知道将用户的 ID 添加到哈希中是否是一种好的做法,如果不是,我还能做什么? 谢谢。

如果有人可以替换您数据库中的凭据,并且如果这是唯一决定对您系统的访问权限的东西,那么,是的,用户可以使您的系统接受他选择的任何密码。

这是为什么许多生产系统……在公司内部使用……的一个重要原因……许多back-side"plumbing"层public-facing 系统 ... 使用任何类型的密码来处理身份验证或授权。相反,他们使用 "trusted third-party authority" 技术,例如 LDAP (OpenDirectory) 或 Kerberos。在任何时候都没有人 "whispering magic-words to one another"。

在这种情况下,"authentication"(验证请求用户的真实身份)和 "authorization"(确定他可以做什么)都不是由系统内部的逻辑处理:这些任务被委托给集中管理的公司机构。有一个概念"single sign-on." 没有"passwords"可以偷。即使系统要求用户响应 personal-challenge,例如输入密码作为程序的一部分,中央机构(软件层)管理一切:提供质询、解释响应、知道及时给出了正确的响应,等等.

这些是具有 peer-reviewed 的强大技术,值得信赖的实施,也是 cross-platform 和行业标准。它们非常全面。当你 "swipe your badge" 每天早上进入你的大楼时,他们可能才是真正打开门锁的人。 PHP、and/or 可以通过任何 web-server 服务访问它们 运行 您的 PHP 应用程序。