読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

[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プロダクトだと値が既知になってしまうので危険、という話。

だから、稼働させる前にキー更新のステップをユーザーに踏ませるべきじゃない?とか、秘密の値は別ファイルにしたら?とか、いろいろアイデアが出ているけど、当面はプロダクトのユーザー(=サーバー管理者)が注意するしかなさそう。

(セッション管理の細かい部分については、これからソース読んで勉強するんで、あまり突っ込まないでください)

【広告】