我有一个现有的、非基于框架的 PHP/MySQL 网站。它有一个简单的安全模型,带有一个包含用户名和散列 (MD5) 密码的用户表。
我目前正在开发这个网站的“版本 2”,这次使用 Symfony 和 Doctrine。新版本运行良好,我正在使用 sfDoctrineGuard 插件进行用户管理。
我想以最少的麻烦将现有用户迁移到新应用程序中,保留他们现有的用户名和密码。不过,我的主要问题是我想更改我正在使用的密码哈希。
当前站点使用密码*的未加盐 MD5 哈希。我已经想出了如何在保持现有算法的同时将用户迁移到 Symfony/sfDoctrineGuard(通过为 unsalted MD5 提供我自己的“算法”函数。)但是 unsalted md5 显然并不理想。
所以 - 我的问题是,给定一堆用户,我可以使用我的自定义纯 MD5 密码哈希算法成功迁移到 sfDoctrineGuard 用户,有什么方法可以转换这些用户,以便他们使用标准的盐渍 SHA1 sfDoctrineGuard 算法?
我想我只能在每个用户登录时为每个用户执行此操作,因为这是唯一一次我将拥有用户的明文密码以进行重新散列。我想我需要做的是在“此用户刚刚使用此密码成功登录”点上挂钩,这样我就可以将用户的算法、盐和密码设置为新的 SHA1 系统,并将用户保存回数据库,他们甚至都不知道。
我已经挖了一点,我想不出一种方法来覆盖或挂钩到 sfDoctrineGuard(特别是 sfGuardSecurityUser,我想?)登录系统在正确的位置。好吧,并非没有破解实际的插件文件,这看起来很邪恶。
那里有任何 Symfony/sfDoctrineGuard 专家可以指出我正确的方向吗?
*不要那样看我,这是我的第一个网站!至少我没有将它们存储为明文......