在 Web 应用程序上下文中,当用户想要更改其当前密码时,通常他们必须先输入其当前密码。但是此时,用户已经使用他们当前的密码进行了身份验证以登录。
我有点理解需要现有密码来防止恶意用户(可能访问用户机器上的当前会话)更改密码。但是这个论点不能在任何情况下使用吗?为什么不每次请求敏感信息时都要求输入密码?更改密码的行为有何不同?
在 Web 应用程序上下文中,当用户想要更改其当前密码时,通常他们必须先输入其当前密码。但是此时,用户已经使用他们当前的密码进行了身份验证以登录。
我有点理解需要现有密码来防止恶意用户(可能访问用户机器上的当前会话)更改密码。但是这个论点不能在任何情况下使用吗?为什么不每次请求敏感信息时都要求输入密码?更改密码的行为有何不同?
如果用户在几分钟内(登录时)无人看管他们的计算机,我们不希望其他人能够经过并快速更改他们的密码。一方面,这也将允许攻击者更改关联的电子邮件地址,而现在合法所有者永远无法取回他/她的帐户。
另一方面,想想办公室恶作剧的可能性!
更改密码是一项足够敏感的操作,因此要求用户重新进行身份验证是有意义的。而且,由于更改密码是一种相对罕见的操作,这不会给用户带来太多不便:它只会在您更改密码的极少数情况下改变用户体验。
除了其他答案表达的安全动机(因为密码非常敏感,我们不希望有人获得临时访问权限,例如午餐时间的突袭,将其转换为永久访问权限),可能存在实际问题。例如,在存在密码加密用户机密的系统中,需要旧密码才能解密此类数据并使用新密码重新加密。这正是在 Windows 操作系统上发生的情况(这是与 Unix 安全模型的最大区别之一),它也可能适用于一些基于 Web 的系统(取决于基于 Web 的系统的功能)。
这被称为TOCTOU原则(Time of Check / Time of Use),这意味着用户身份的认证保证(即用户仍然是向系统认证的同一用户)太低,无法让他执行一些操作,例如更改密码或重新定义身份。
为了确保在完成关键操作时身份验证保证级别尽可能高,“delta TOCTOU”,即检查凭据和使用其权限之间的时间,必须尽可能短,以防止 DW 解决的问题
对我来说,这是在安全性和可用性之间进行可调节折衷的一个明显例子。
可能需要旧密码的另一个原因是当密码被散列时,并且您想检查新密码是否与旧密码不太相似,您必须询问用户,因为您无法获得该信息否则来自散列密码。