1

私の CakePHP 2.1 アプリは、そのユーザー データベース テーブルを別のアプリと共有しています。ユーザーが両方のアプリケーションにログインできるようにするには、パスワード フィールドをプレーンな MD5 でハッシュする必要があります。他のアプリやデータベースを変更することはできません。

次の方法で、ハッシュ アルゴリズムを SHA1 (デフォルト?) から MD5 に変更できます。

<?php
// AppController.php

public function beforeFilter()
{
    Security::setHash('md5');
}
?>

また、プレーンな MD5 パスワードを使用して新しいユーザーをシステムに追加できます。

<?php
// User.php

public function beforeSave()
{
    if (isset($this->data['User']['password']))
    {
        $this->data['User']['password'] = Security::hash($this->data['User']['password'], 'md5', false);
    }
}
?>

falseのブール値パラメータはSecurity::hash、パスワードにセキュリティ ソルトを使用しないよう Cake に指示することに注意してください。

問題は認証で発生します。$this->Auth->login()フォーム認証を使用してユーザーにログインするとAuthComponent、MD5 ハッシュを使用してパスワードを検証していると思いますが、その上にセキュリティ ソルトが適用されています。

この問題を回避する唯一の方法は、セキュリティ ソルトと cipherSeed を空の文字列として設定することです。

<?php

// core.php
Configure::write('Security.salt', '');
Configure::write('Security.cipherSeed', '');

?>

...または単にコメントアウトします。

$this->Auth->login()から削除せずにセキュリティ ソルトを無視するように指示する方法はありますかcore.php。他の場所のハッシュ機能を引き続き使用したいと思いAuthComponent::password()ます。

この問題に対処する最も安全で安全な方法は何ですか?

4

1 に答える 1

3

You could do the login manually by passing the correct user to the Auth->login() function:

$username = $this->request->data['User']['username'];
$password = Security::hash($this->data['User']['password'], 'md5', false);

$user = $this->User->find('first', array('conditions' => array('username' => $username, 'password' => $password)));
if($user !== false)
{
    $this->Auth->login($user['User']);
}
于 2012-05-03T06:53:56.010 に答える