只使用sha1通过CakePHP 2.4进行身份验证?

时间:2014-01-10 18:14:03

标签: authentication login cakephp-2.4

我在CakePHP 2.4中遇到了一些问题。我烘焙了一个简单的应用程序来创建登录。我做了书中的所有内容(Auth和Tutorial)。但只有sha1工作。但不是sha256或md5。在搜索和测试之后,我找到了一个解决方案,我不得不更改书中的示例代码,现在它可以工作了。但我认为,这不是正确的解决方案。

我在AppController中执行了以下操作:

App::uses('Controller', 'Controller');
    class AppController extends Controller {
    public $components = array(
        'Session',
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'passwordHasher' => array(
                        'className' => 'Simple',
                        'hashType' => 'sha256'
                    )
                )
            )
        )
    );
}

我用md5,sha1和sha256测试了这个。没问题。如果密码被适当地散列,则登录有效。

但我注意到,添加用户仅适用于sha1 ,因为这是默认哈希。 我的用户模型之前的安全功能就是这个(来自书中):

App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel {
  public function beforeSave($options = array()) {
    if (isset($this->data[$this->alias]['password'])) {
        $passwordHasher = new SimplePasswordHasher();
          $this->data[$this->alias]['password'] = $passwordHasher->hash(
              $this->data[$this->alias]['password']
          );
    }
    return true;
  }
}

我想,AppController中的设置就足够了,也可以改变这个区域的SimplePasswordHasher。但看起来,这还不够。所以我改成了这个:

$this->data[$this->alias]['password'] = $passwordHasher->hash(
    $this->data[$this->alias]['password']
);

到这个

$this->data[$this->alias]['password'] = Security::hash(
    $this->data[$this->alias]['password'],
'sha256',
true
);

现在一切都像魅力一样。但我的问题是:

1)我是对的,这是必要的还是我的代码还有其他问题?

2)据我所知,$xxx->zzz仅适用于控制器而xxx::zzz()适用于所有地方,对吧?

3)为什么我必须说安全散列,它应该再次使用sha256散列字符串,当我说已经在AppController中一般?

1 个答案:

答案 0 :(得分:0)

1。据我所知,您的方法是正确的。可能存在一种更清洁的方式,但我使用bcrypt,并且Cookbook说要做一些非常相似的事情。

2。你可以像你说的那样思考一个简单的解释。基本上->object-operator,用于处理对象,例如$this->doEverything::scope-resolution-operator,用于查找Class静态属性或方法。通常你可以在任何地方运行它,例如Security::hash()

3。看一下here,您应该将AppController更改为:

'passwordHasher' => array(
                'className' => 'Simple',
                'hashType' => 'sha256'
            )

以适应推荐。我试过这个,并没有将SimplePasswordHasher更改为SHA256。蛋糕似乎在某种程度上忽略了它的参考。但这就是简单的哈希,旨在简单的事情,所以你 应该做自己的方法,或者更适合你的需要。