[ruby][rails] Rails-MLウォッチ "Cookie session security and open-source" オープンソースのRailsアプリケーションを使う時の注意事項
Cookie session security and open-source - Ruby on Rails: Core | Google グループ
Ralisのセッション管理の汚染チェックに使われるsecret_keyが、オープンソースのRailsアプリケーションにとっては脆弱性になるのではないか、という話。
それは確かにそうで、オープンソースのRalisアプリケーションを自分のサーバーで稼働させる時には、config/environment.rb の
config.action_controller.session = { :session_key => '_myproj_session', :secret => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' }
となっている部分の :secret の部分(上の例では 'xxxxxxx' のところ)を書き換えて使うべき。ここテストに出るよ。
仕組み
仕組みを説明すると、Railsのバージョン2以降では新しいセッション管理の方式が採用されている。これは、従来と違い、セッションデータを丸ごと Marshal.dump して直接 Cookieに格納するという方式。確かに、オブジェクトの大きさが Cookie の16KB制限に引っ掛かる可能性は(あんまり)ないから、結構合理的。
ただし、そのままだと悪意(と知識)があるユーザーがセッションを書き換えることができてしまうから、秘密の値と合わせて取ったハッシュ値を一緒に格納することで、不正な操作を防いでいる。
で、この秘密の値は絶対に秘密にしなければいけないから、rails コマンドでプロジェクトが生成されるときに自動的に生成される。しかし、プロジェクトのファイルに含まれてしまうからオープンソースのRailsプロダクトだと値が既知になってしまうので危険、という話。
だから、稼働させる前にキー更新のステップをユーザーに踏ませるべきじゃない?とか、秘密の値は別ファイルにしたら?とか、いろいろアイデアが出ているけど、当面はプロダクトのユーザー(=サーバー管理者)が注意するしかなさそう。
(セッション管理の細かい部分については、これからソース読んで勉強するんで、あまり突っ込まないでください)