LoginSignup
4
1

More than 5 years have passed since last update.

PlackではCGI::Sessionはやめておいた方がいいという話

Last updated at Posted at 2018-05-18

こんな記事昔書いたんですけど、本番環境では危険であることが判明したので共有します。結論はタイトル通りです。

事象

Plackの環境変数はサブルーチンの第一引数の(一般的にはmy $env = shiftとして取得される)ハッシュリファレンスである一方、CGI::Sessionは環境変数$ENV{REMOTE_ADDR}をコンストラクタで参照しており、CGIではない環境下において、これは常にundefになり、空文字列同士で同一のホストとして判定されてしまいます。

つまり、異なるセッションを同一として判定してしまう脆弱性(これセッションハイジャックですよね?)を引き起こします。

対策

  • Plackの側で都度$ENV{REMOTE_ADDR} = $env->{REMOTE_ADDR}などとする?(かなりの魔改造なので私は断念)
  • 代わりにPlack::Sessionを使う

まとめ

CGI::Sessionの良いところは$session->expire('user', '+1w' );などといったパラメーターごとに期限を設定できる点にあると思いますが、やはりまぁ、名前通り、CGIのみに使った方が無難です。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1