Session Fixation

今更ながら、Session Fixationなるものを知ったのでメモ。

内容は以下、徳丸先生が詳しい。
とくまるひろしのSession Fixation攻撃入門 | 徳丸浩の日記

日本語では、セッション固定攻撃と呼ばれているようで、
ログイン認証をセッションで行っているサイトに対して、何らかの方法でユーザーに意図した固定セッションIDを与えた状態でログインしてもらい、
攻撃者はそのIDでログインしたことにする、というもののよう。

対策としては以下いずれかになるよう。

(1) セッション変数内に特定の値を常に与えるようにし、もしその値が無かった場合には正しくふられたセッションIDではないと判断する。
(セッションIDの正当性をセッション変数内に埋め込む)
(2) ログイン処理など、そのサイトでの本来のセッションの使用を行う時点で(重要な情報を持たせるときに)、セッションIDを変更する。 http://pentan.info/php/session_fixation.html

2のセッションの付け替えは以下のようにする。

session_start();
session_destroy();
session_start();
session_regenerate_id();

ログインが成功し、ログイン認証をセッションに格納する直前に付け替えを入れてやれば、
ログイン後には別のIDとなるので、攻撃側が用意した固定IDを回避することが出来る。

ただしこの、session_regenerate_idは結構な負荷がかかるようで、
連続して使用しているとセッションが切れてしまうらしい。
なので、連続的に実行されないようにする事が重要っぽい。
ログイン時に一回のみ実行されるようにしておけば特に問題なさそう。

参考

セッションハイジャック と session_regenerate_id( )関数 – Shoulder.jp
セッションの有効期間とか設定とか挙動とかを調べました – [PHP + PHP] ぺんたん info
セッション固定攻撃(session fixation) – [PHP + PHP] ぺんたん info
ログイン後にsession_regenerate_id()を実行するだけで十分か? | yohgaki's blog

php
   このエントリーをはてなブックマークに追加