我正在一个中等规模的 PHP CodeIgniter 网站上创建基本的密码安全性。我需要开始加密保存到数据库中的密码。可以使用不同的方法插入用户密码,包括 CSV 导入或个人注册方法。
因此,我只想知道在 MVC 系统中应该加密密码的正确级别是什么?
我正在一个中等规模的 PHP CodeIgniter 网站上创建基本的密码安全性。我需要开始加密保存到数据库中的密码。可以使用不同的方法插入用户密码,包括 CSV 导入或个人注册方法。
因此,我只想知道在 MVC 系统中应该加密密码的正确级别是什么?
唯一需要执行此功能的时候是添加新用户或更新现有用户的密码。这两个功能都应该由 User 模型执行。例如,类似:
$user = new User();
$user->setName('...');
$user->setPassword('...');
$user->save();
或者:
$user = User::find('...');
$user->setPassword('...');
$user->save();
在此示例中, setPassword() 方法将执行实际加密。
另外,这样想——应该不可能将未加密的密码输入系统。因此,您使 User 模型成为与用户交互的唯一方式,并让它透明地加密所有提供给它的密码。
这完全取决于您如何存储密码。
我通常这样做:
如果您没有使用 UserID 或运行时生成(即插入时)salt,那么您可以同时插入和加密密码。
编辑...
抱歉,我继承了您对 Encrypt 的使用,但是对于密码,您“应该”只对密码进行 HASH。
一个简单的例子是:
md5(md5(UserID).md5('Password'))
然后,当用户输入他们的电子邮件/用户名和密码时,您只需要:
select * from User where Username = 'myusername' and Password = md5(concat(md5(UserID), md5('Password')))
而不是解密密码。