2011年8月7日日曜日

Rails3を初歩から学ぶ#3 passwordについて

この一連のエントリは
Ruby on Rails 3 Tutorial: Learn Rails by Example (Addison-Wesley Professional Ruby Series)
で参考に学んだことを凝縮してお送りしています。



前回作成したUserモデルに「encrypted_password」と「salt」というものを追加していますが、どのような認証のシーケンスをたどるのか、あらかじめここで考えておきます。
Userクラスにはユーザーから渡されたパスワードを保持する「password」フィールドを定義します。これは前回生成した「encrypted__password」とは別モノです。
データベース上に格納するのはあくまで暗号化した情報である「encrypted_password」です。

Userモデルでは「password」を受け取るとこれを暗号化して「encrypted_password」としてデータベースに格納します。
このとき単純にハッシュをかけて暗号化するだけではセキュリティ上危険なので毎回異なる値をパスワードに付加してハッシュするようにします。この「毎回異なる値」が「salt」です。
なのでまとめると、「ユーザー入力」->「passwordフィールド」->「salt生成」
->「salt+passwordでハッシュ算出」->「encrypted_password」として格納、となります。

また一般的なWebサービスでの新規登録時にはパスワードを二回入力することが求められることが多いです。Railsでは「password」というフィールドに対して「:confirmation=>true」と指定することで「password_confirmation」というフィールドが自動で追加されます。
そして「password」と「password_confirmation」が一致しないと自動的にエラーを返すようになります。

この辺りの事情を頭に入れて、次回からUserモデルを実装していきます。

0 件のコメント:

コメントを投稿