私の 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()
ます。
この問題に対処する最も安全で安全な方法は何ですか?