つれー、つれーわー、実質(ry前回はログファイルのセキュリティについて触れました。Rails(Web)アプリケーションのセキュリティ(ログファイル編)今回はRails2系でよく使われるプラグインのrestful_authenticationでのパスワードハッシュ化について書きます。※3系のことはよくわからんです。restful_authenticationとは?詳しくはrestful-authenticationを見てもらえればと思いますがざっくり説明するとWebサービスなんかでよくあるユーザ管理(ユーザの登録、ログイン、ログアウト)なんかの機能をまとめた便利プラグインです。パスワードハッシュ化&stretchingパスワードのハッシュ化とstretchingについては下の春山さんの資料が大変参考になります。パスワードの話restful_authenticationでのstretchingではrestful_authenticationがstretchingしているところを見てみます。RAILS_ROOT/vendor/plugins/restful-authentication/lib/authentication/by_password.rbだいぶソースを端折っていますが、REST_AUTH_DIGEST_STRETCHESという定数で繰り返し回数を指定してstretchingしているようです。この定数は以下のファイルで設定されているようです。RAILS_ROOT/config/initializers/site_keys.rbこのファイルは下のコマンドでモデルを作ったときに自動生成されます。sessions何回stretchする?デフォルトの設定では10回のstretchをしているようです。資料にも書いてありますが、回数が多ければ強度を増すことができます。回数が多ければ多いほどハッシュ化に時間がかかりますし、ログイン認証処理にも同様に時間がかかる様になります。サービス要件を考慮した回数でstretchしたらいいと思います。ちなみに僕が作るときは1000回以上はstretchするようにしています。いうのも、以前1000回のstretchingでサービスを構築した時の実績として、性能面ではサービスの要件を十分に満たせるレベルでしたし(むしろ速かった)、強度的にもある程度担保できていたと考えるからです。次回以降は、もう少しstretchして、5,000回くらいで試してみてもいいかもしれないとも思っています。ecnavi_tech2010年12月13日13:56カテゴリprogrammingRailsRails(Web)アプリケーションのセキュリティ(ログファイル編)はじめまして、ジョニー・デップに激似の山口(@tadasy)と申します。僕はPeXという部署で働いておりまして、PeXやpayca、グルピの運営に携わっております。ECナビではサービスを作るときは、よくPHPを使われるのですが、PerlやPython,Rubyなどで構築されているサービスもちょいちょいあります。Rails)で構築しました。そのRailsのwebアプリケーションを構築・運用していく中で、セキュリティ的に気をつけたポイントを何回かにわけて心折れるまで(おそらく2,3回)書いていこうと思います。いうわけで第1回はログファイルについてです。ログファイルのセキュリティ?ログファイルのセキュリティって言われてもあまりピンとこないかもしれませんが、Railsではproduction環境でもデフォルトで、HTTPのパラメータが全部ログに出力されてしまうとこです。個人情報も当然、ログファイルの書かれます。DBに会員パスワード情報を復号できない形でハッシュ化して保存していても、ログファイルに書かれてしまったら、もろもろ台無しです。いうクラスマクロが定義されています。これを使うことでログファイルへの書き出しを抑止できます。上記のように記述するとログファイルに記載される該当するパラメータ値が[FILTERED]という文字に置き換えられます。"first_name"=>"太郎"}...}適用後のログファイルをみると"password_confirm"というパラメータも置き換得られていることがわかります。:passwordと書くことで/password/iという正規表現でパラメータ名をチェックされるためです。詳しい使い方についてはaction_controller/base.rbにfilter_parameter_logging定義されていますのでそちらのコメント欄が参考になります。一応コメントを引用しておきます。"[FILTERED]"ブロックも渡せるらしく、かなり柔軟な使い方ができそうですが特に使い道が思いつかないので、今はシンプルに利用しています。注意Rails3系ではfilter_parameter_loggingはdeprecatedになっており、別の使い方が推奨されているようです。