Mojolicious::Lite でセッションの名前とかセキュア属性とかいじる

Mojolicious::Lite でセッションの名前とかセキュア属性とかいじるぱわふるドキュメントによると、Mojolicious(::Lite)のデフォルトのセッションはセッション情報をサーバ側に保存せずにクライアント側にクッキーとして暗号化(base64 デコードしたら普通にJSON形式のデータが出てくるので暗号化はされていません)+署名して保存するみたい。
サーバ側で保存しなくて良い代わりに4096バイトの制約があるようだ。

しかし、そのクッキーを盗聴される(丸々コピーされる)とまずいのでクッキーにSecure属性を付けたいと思って調べました。LiteでないMojoliciousの情報ばかりで少し時間がかかった。

これだけでOKでした。(ブラウザから簡単に確認できます)
cookie_name はなくても良いですが、デフォルトだと mojolicious って出ます。
本当にセキュアなのが欲しいときは app->secret に適当な文字列渡すべきみたい。

クライアント側でクッキー書き換えられへんのかいな!?と思ったけど、署名してるから無理っぽい(というのを信じるしかない)。

ちなみに有効期限は $self->session(expires => time + (60 * 10)); とかすると設定できました。(焼いて10分後に賞味期限切れ)

セッションに情報をセットするときと同じ書き方なので、「expires」だけ特別扱いということなんかなぁ。

+追記+
クッキーの有効期間は app->sessions->default_expiration(秒数); で設定してもOKです。
どうやら app->sesssions で Mojolicious::Sessions にアクセスしているようです。

+追記2+
微妙にアクセスが少なくないのでもう少し詳しくおきます。
expires(expiration も) はソースコード読む限り特別扱いになっています。
セッションID固定化攻撃は受けないけど、secret の保管にやや気を使わなければなりません。
cookie_name とか cookie_path はグローバルに変更されるので訪問者ごとに異なるものにしたい場合はやや注意。

デフォルトのセッションの取り扱いは http://toroid.org/ams/etc/mojolicious-session-cookies も参考に。
↑のリンク先ではHMAC-MD5になってるけど今のはMojoliciousはHMAC-SHA1使っていると書かれています。

Mojolicious自体がもの凄い勢いでアップデートされているので公式のドキュメントで最新の正確な情報を得るのをオススメします。

ついでに暗号化されてるとか致命的な嘘ついてたので修正。<(_ _)>


コメントを残す

メールアドレスが公開されることはありません。