ハッシュ関数の選択とハッシュ化処理
CakePHPでは、ログイン時にはpasswordを自動的にハッシュ化して認証を行ってくれますが、そのパスワードを登録する際は、明示的にハッシュ化する必要があります。
ハッシュ関数の選択
ハッシュ関数はデフォルトではSHA-1が使用されます。変更する場合は、Security::setHash($hash)を使用して(AppController.php内で)定義することができます。
ソース:/lib/Cake/Utility/Security.php
// /app/Controller/AppController.php public function beforeFilter(){ Security::setHash( 'sha256'); }
各ハッシュ関数でハッシュ化した際の長さになります。(length固定なのでvarcharよりcharを指定したほうが処理コストが少なくなるでしょう。)
以下がCakePHPで用意されているハッシュ方式ですが、その他PHPで使える関数をそのまま設定すればよさそうです。(要確認)
- sha1 - 40(バイト)
- md5 - 40(バイト)
- sha256 - 64(バイト)
- sha512 - 128(バイト)
- blowfish - 60(バイト) → Blowfishを使用してハッシュ化する
タイムリーにこのような記事がありました。デフォルトのsha1からは変更しておいたほうがいいかもしれません。
“日本の標準暗号”が10年ぶり大改定、国産暗号削減よりもRC4とSHA-1の監理ポスト入りが影響大
一方、より問題が大きい暗号方式もある。「運用監視暗号リスト」に回された暗号方式だ。このリストは「推奨すべき状態ではなくなった暗号技術のうち、互換性維持のために継続利用を容認するもののリスト」。いわば監理ポストという位置付けだ。ストリーム暗号の128-bit RC4とハッシュ関数の「SHA-1」などが、このリストに回されている。
ハッシュ化
テキストのハッシュ化はSecurity::hash($string, $type = NULL, $salt = false)を使用して下さい。
ソース:/lib/Cake/Utility/Security.php
$password = Security::hash( $plain, 'sha512', true); // $password = $this->Auth->password( $plain);
- $string - ハッシュ化対象のテキスト
- $type - 使用するハッシュ関数
- $salt - trueに設定した場合、(/Config/Core.php)Security.saltに$stringを付与してハッシュ化を行います。
また、$this->Auth->passwordでも同様のことが行えます。この場合は、上のsetHashで設定したハッシュ関数を使用して($salt=trueで)、ハッシュ化されます。(Security::hashを呼び出しているだけ)
ソース:/lib/Cake/Controller/Component/AuthComponent.php
public static function password( $password) { return Security::hash( $password, null, true); }
関連記事
-
ログローテーション
CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替え
-
パス定数と変更方法やURLの取得
CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。
-
ユーザ登録(仮登録・メール・本登録)
以前1.3版で投稿した「ユーザ登録」処理の2.x版を作成しました。フローは同じで以下のようにします。 1. メールアドレス・パスワードでユーザ登録 2. この時点では仮登録として、本登録用のU
-
(メール・URL・電話・郵便・IP) データ バリデーション
今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。 バリデーションルール 以下の5つのバリデーションルールがコアに用意されています。 email メールアドレス
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
recursive設定によるfind()性能改善
CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎま
-
Markdown Plugin
「Markdown CakePHP Plugin」は、MarkDown書式をレンダリングしてくれるビューヘルパーです。MarkDownについて勉強しているうちに出会ったので試し打ちです。 ダウンロー
-
ネストしたリストを出力「nestedList」
DBやJSONからデータを取得して、そのデータをもとにメニュー表示などネストしたリストを出力させたい場合に「nestedList」が便利です。 ヘルパーに渡すデータは連想配列である必要があります。(
-
CakePHP インストール時エラーの対処
CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設
-
selectボックスを実装
今まで、selectボックスのgroupを作成するのにSet::Combineを使用していましたが、意外と簡単にできることに気付いてしまったので、ご紹介。(自分だけ知らなかったことに気付いた と言った