Contents
セッションハイジャック
攻撃内容
WEBシステムのログイン後にセッションIDを盗み、ログイン者として該当のシステムを操作する「なりすまし行為」です。
システムで扱う内容にもよりますが、以下のことが可能です。
- 不正送金
- 不正購入
他人の運転免許(名義)で契約したり他人のパスポートで海外で悪さするなどが似ている犯罪になります。
そのため自分の情報は守りましょうね!というのが非常に大切になってきます。
セッションとは?
アクセス開始から終了までの一連の通信の事を指します。
例えばシステムにログインして検索をしてデータを登録するという処理をしたとします。
上記の例では2つの処理を行っているのですが、検索と登録の2処理を1回のアクセスで行っているので1セッションとカウントします。
HTTP通信では状態を保持することが出来ないので、セッションという値を用いて状態を保持すると覚えましょ。
対策
攻撃する人にセッションIDを推測されないことが鉄則です。
まず最初にやることは見える位置にセッションIDを配置しないでください。
- URLにセッションを含まない
- hiddenにセッション値を設定しない(やる人いないと思いますが、一応)
その上でなりすましを防ぐためにログイン後にセッションIDを書き換えましょう。
PHPの場合は組み込み関数のsession_regenerate_id();を使用します。
上記関数を使用することで使用しているセッションIDを書き換える事が可能です。ログイン処理の関数を作って最後にsession_regenerate_id()関数を記述すれば安全にセッションIDを管理できます。
echo session_id(); //①
session_regenerate_id(); //セッションID書き換え
echo session_id(); //②
また仕組み上、セッションIDはCookieに保存されるのでHTTPS通信にのみCookieを有効化するように設定します。
//Apacheでの設定方法
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
//php.iniでの設定方法
session.cookie_httponly = 1