2

CakePhp 1.3 を使用して構築された既存の Web サイトがあります。その Web サイトでは、パスワード ハッシュに MD5 アルゴリズムを使用しました。

CakePhp のバージョンを 2.3.5 にアップグレードしたいのですが、パスワード ハッシュに MD5 を使用できません。

CakePhp 2.x で MD5 を使用できない理由を知りたいです。?

4

2 に答える 2

5

パスワードに md5 を使用しないでください

md5 は、パスワードのハッシュに適したハッシュ アルゴリズムではありません。使用しないでください。その理由を説明する多くの参考文献があります - phpマニュアルを含みます:

md5() や sha1() などの一般的なハッシュ関数がパスワードに適さないのはなぜですか?

MD5、SHA1、SHA256 などのハッシュ アルゴリズムは、非常に高速かつ効率的に設計されています。最新の技術とコンピューター機器により、元の入力を決定するために、これらのアルゴリズムの出力を「総当たり」することは簡単になりました。

最新のコンピューターはこれらのハッシュ アルゴリズムを非常に迅速に「逆転」できるため、多くのセキュリティ専門家は、パスワード ハッシュにアルゴリズムを使用しないことを強く提案しています。

デフォルトのハッシュ アルゴリズムを変更する方法

setHashを使用してデフォルトのハッシュ アルゴリズムを変更できます。パスワードに推奨されるハッシュ アルゴリズムは、blowfish です。

Security::setHash('blowfish');

既存のパスワードの処理方法

本当にしたい場合は、setHashmd5 を使用するように変更できます。

しかし、それは良い考えではありません。

古いアプリケーションの貧弱なセキュリティに対応するためだけに、新しい/更新されたアプリケーションのセキュリティを妥協しないでください。前のアプリケーションと同じハッシュ アルゴリズム (およびソルト) を使用する代わりに、次のようなロジックを使用できます (疑似コード)。

$username = $this->data['User']['username'];
$plainText = $this->data['User']['password'];

$user = current($this->User->findByUsername($username));

Security::setHash('blowfish');
$blowfished = Security::hash($plainText, 'blowfish', $user['password']);

if ($blowfished === $user['password']) {
    return true; // user exists, password is correct
}

$oldSalt = Configure::read('configure.this');
$md5ed = Security::hash($plainText, 'md5', $oldSalt);

if ($md5ed === $user['password']) {
    $this->User->id = $user['id'];

    $blowfished = Security::hash($plainText);
    $this->User->saveField('password', $blowfished);

    return true; // user exists, password now updated to blowfish
}

return false; // user's password does not exist.

この種のロジックは複雑ではなく、不適切なハッシュ アルゴリズムを使い続ける必要がありません。

于 2013-07-04T10:52:28.850 に答える