6

我正在一个中等规模的 PHP CodeIgniter 网站上创建基本的密码安全性。我需要开始加密保存到数据库中的密码。可以使用不同的方法插入用户密码,包括 CSV 导入或个人注册方法。

因此,我只想知道在 MVC 系统中应该加密密码的正确级别是什么?

4

2 回答 2

3

唯一需要执行此功能的时候是添加新用户或更新现有用户的密码。这两个功能都应该由 User 模型执行。例如,类似:

$user = new User();
$user->setName('...');
$user->setPassword('...');
$user->save();

或者:

$user = User::find('...');
$user->setPassword('...');
$user->save();

在此示例中, setPassword() 方法将执行实际加密。

另外,这样想——应该不可能将未加密的密码输入系统。因此,您使 User 模型成为与用户交互的唯一方式,并让它透明地加密所有提供给它的密码。

于 2012-05-31T15:37:28.267 回答
0

这完全取决于您如何存储密码。

我通常这样做:

  1. 创建一个密码字段设置为空(非空)的用户。
  2. 将用户插入数据库,从而生成新的 UserID。
  3. 使用新插入的用户 ID,加上一些额外的盐来生成密码并存储。

如果您没有使用 UserID 或运行时生成(即插入时)salt,那么您可以同时插入和加密密码。

编辑...

抱歉,我继承了您对 Encrypt 的使用,但是对于密码,您“应该”只对密码进行 HASH。

一个简单的例子是:

md5(md5(UserID).md5('Password'))

然后,当用户输入他们的电子邮件/用户名和密码时,您只需要:

select * from User where Username = 'myusername' and Password = md5(concat(md5(UserID), md5('Password')))

而不是解密密码。

于 2012-05-31T15:47:32.640 回答