[PHP]セッションハイジャック

セッションハイジャック

攻撃内容

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

Twitterでフォローしよう

読んでみーな
おすすめの記事