Webセキュリティ入門:HTTP・Cookie・脆弱性
セッションはどこに置かれているのか
この回でやること
セッションは識別のための値をどこに置き、どう扱うかの仕組みです。設計の分かれ目を見ます。
- 読む 約 5 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
セッションは、ログイン中の利用者を要求ごとに見分けるための仕組みです。ブラウザに渡す値を何にするかで、安全さの大半が決まります。
読み終えるころには、セッション識別子に求められる性質を挙げられます。
引き換え札の考え方
セッションは、預かり所の引き換え札に似ています。
サーバー側に「この人は利用者42番で、ログイン中」という情報を持ち、利用者にはその情報を指す札だけを渡します。札そのものには意味を持たせません。
こうすると、利用者の手元には推測できない文字列しか置かれません。中身を書き換えて別人になることもできません。
札に必要な性質
推測できないこと。 連番や、時刻から作った値は使いません。総当たりで見つかる長さも避けます。十分な長さの乱数を、暗号用の生成器で作ります。
使い回さないこと。 ログインの前後で札を作り直します。作り直さないと、事前に用意した札を利用者に使わせ、ログイン後にその札で入る、という手が通ります。
期限があること。 使われないまま放置された札は無効にします。共用の機械で閉じ忘れたときの被害を短くします。
画面を閉じるだけでは札は生きています。ログアウトでは、サーバー側の記録を消すところまでやります。ブラウザ側の Cookie を消すだけでは、その札を持っている人はまだ入れます。
情報を札に載せる形
札に情報そのものを載せる方式もあります(署名付きのトークンなど)。サーバー側で記録を持たなくてよい代わりに、注意点が増えます。
- 署名は改ざんを防ぐが、中身は読める。秘密を入れない
- 発行したあとに取り消しにくい。期限を短くする工夫が要る
どちらを選ぶにしても、取り消せるかどうかを先に考えておきます。
状況が変わったときに作り直す
札は、発行したあとも状況に応じて扱いを変えます。
権限が変わったとき。 管理者から外れたのに古い札がそのまま通ると、外したはずの権限で操作できます。権限を変えたら、その人の札を作り直すか無効にします。
合言葉を変えたとき。 変える理由は「漏れたかもしれない」であることが多い。変えたのに古い札が生きていると、変えた意味が薄れます。他の端末の札も一緒に無効にするかどうかを決めておきます。
同時に何台まで許すか。 複数端末を許すなら、利用者自身が一覧を見て切れるようにしておくと、異変に気づいたときに自分で対処できます。