我目前是处于开发阶段的项目的工程师。该项目的一个“模块”提供了用户身份验证/授权的能力。然而,我们担心密码散列算法可能不符合 cop(也不是 BCrypt)。(可怕的是不太确定它是什么以及它来自哪里!)。
这显然必须改变,并且正在安排补丁。我们必须自然地更新所有测试用户,因为他们的密码将使用旧的哈希方法,这不是什么大问题,我们所有的演示用户在构建时都是自动化的,所以它正在更新脚本。但下一个问题是,如果这是一个拥有活跃用户和过时用户的生产系统,无论数量如何。什么是最佳实践。
- 自动强制每个用户重置密码?这将通知每个用户他们的密码已被更改,并可能导致问题/困惑,并可能导致怀疑存在安全漏洞。可能会提出更多问题,这些问题不一定能够由网站利益相关者回答。
- 更新数据库以标记它是新方法还是旧方法,然后一旦用户通过身份验证,请使用更新他们在数据库中的密码。在服务中需要一些逻辑,并且转换对于任何现有用户来说都是无缝的。问题是如果存在漏洞,那么很明显这里有两种方法,如果发现不太安全的方法不安全,那么它显然可能会被破坏。
- 使用现有哈希的 BCrypted 版本重置所有密码。将其标记为旧样式,因此在成功验证后,它只保留密码的散列而不是散列的散列。