我有一个现有的、非基于框架的 PHP/MySQL 网站。它有一个简单的安全模型,带有一个包含用户名和散列(MD5)密码的用户表。
我目前正在开发该网站的“版本 2”,这次使用 Symfony 和 Doctrine。新版本运行良好,我正在使用 sfDoctrineGuard 插件进行用户管理。
我希望以最少的麻烦将现有用户迁移到新应用程序,并保留他们现有的用户名和密码。不过,我的主要问题是我想更改我正在使用的密码哈希。
The current site uses unsalted MD5 hashes of the passwords*. I've already figured out how to migrate users to Symfony/sfDoctrineGuard while maintaining the existing algorithm (by providing my own "algorithm" function for unsalted MD5.) But unsalted md5 obviously isn't ideal.
所以 - 我的问题是,鉴于我可以使用自定义纯 MD5 密码哈希算法成功地将一堆用户迁移为 sfDoctrineGuard 用户,有什么方法可以转换这些用户,以便他们使用标准的加盐 SHA1 sfDoctrineGuard 算法?
我认为我只能在每个用户登录时为每个用户执行此操作,因为这是我唯一一次拥有用户的明文密码以进行重新哈希。我想我需要做的是在“此用户刚刚使用此密码成功登录”点处进行挂钩,这样我就可以将用户的算法、盐和密码设置为新的 SHA1 系统,并将用户保存回数据库,而他们甚至不知道。
我已经进行了一些研究,但我无法找到一种方法来在正确的位置覆盖或挂钩 sfDoctrineGuard (特别是 sfGuardSecurityUser ,我认为?)登录系统。嗯,不是没有修改实际的插件文件,这看起来很邪恶。
有 Symfony/sfDoctrineGuard 专家能给我指出正确的方向吗?
*Don't look at me like that, it was my first website! And at least I didn't store them plaintext...