使われているのは phpass というパスワードハッシングフレームワークです (PHPフレームワーク関連なら CodeIgniter のライブラリ Tank_Auth にも採用されていますね) 。パスワードのセキュリティについて自分はあまり詳しくないので、以下に役に立ちそうなリンクを載せておきます。
- なぜPHPアプリにセキュリティホールが多いのか?
- ハッシュとソルト、ストレッチングを正しく理解する。「本当は怖いパスワードの話」
- SlideShare 徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
- Ustream 徳丸本に学ぶ 安全なPHPアプリ開発の鉄則 2011
- CakePHP Authコンポーネントでパスワード・ハッシュをストレッチングするには?
- パスワードにストレッチングは必要か。
- Rails(Web)アプリケーションのセキュリティ(パスワードハッシュstretch編)
上記のリンクを参考にしつつ、今回紹介されている Wiki の記事と照らし合わせて、ユーザ登録と、ログイン機能を実装していきます。
まず こちら から最新バージョンの phpass を DL、解凍して、protected/extensions 下に設置。続いて、protected/config/main.php に以下を追加。
(Yii の Wiki の記事とは異なり params の部分は array() を一つ省いています) iteration_count_log2 はストレッチング値です。例えば 8 の場合は 2^8 で 256 回繰り返す設定です。4~31 までの数値を設定できます。上記の場合は 12 なので 2^12 で 4096 回繰り返すことになります。数値が高ければ高いほどいいわけですが、その分、負荷がかかるので、環境、要件などに合わせて、慎重に設定すること。ちなみに今回の 4096 回くらいならユーザ登録、ログインともにほんの少しひっかかる程度の速度で 2147483648 回、つまり iteration_count_log2 が最大の 31 の場合は、待っても待っても全然進まない感じでした (もちろん環境によって違いがでます) 。
portable_hashes は true の場合、ハッシュ関数に md5 が使われ、false の場合、CRYPT_BLOWFISH, CRYPE_EXT_DESC, md5の順に試されます。
では、ログイン機能から作ってみます。
次にユーザ登録用のモデルサンプル。 あとは認証用モデル、コントローラ、ビューなどを作成していきます (ここでは省略) 。
0 件のコメント:
コメントを投稿