在MVC架构中,应该在哪里进行密码加密

时间:2012-05-31 15:31:44

标签: php model-view-controller codeigniter encryption

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

因此,我只是想知道MVC系统中哪些密码应加密的正确级别?

2 个答案:

答案 0 :(得分:2)

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

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

或:

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

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

另外,以这种方式考虑它 - 不可能将未加密的密码输入系统。因此,您将User模型作为与用户交互的唯一方式,并使其透明地加密所有给予它的密码。

答案 1 :(得分:0)

这完全取决于您存储密码的方式。

我通常会这样做:

  1. 创建一个密码字段设置为空(非空)的用户。
  2. 将用户插入数据库,从而生成新的UserID。
  3. 使用新插入的UserID,加上一些额外的盐来生成密码和存储。
  4. 如果您没有使用UserID或运行时生成(即插入)salt,那么您可以同时插入和加密密码。

    编辑...

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

    一个简单的例子是:

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

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

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

    而不是解密密码。