親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

ステートレスの場合のセッションハイジャック対策

セッションハイジャックとは

ハイジャックという言葉は、輸送機関などが強奪される時に使用される言葉ですが、web業界でも使用されます。
それがセッションハイジャック。
セッションハイジャックについてはググればいくらでも出てくるので詳細な説明は省きますが、
その名の通りセッションを強奪されて悪用されてしまうことを言います。

よくなりすましという言葉を聞いたことがあると思いますが、
サイトによってはセッションIDを取得することでログイン状態になることもできるため、
本人のふりをして会員情報を操作されたり身に覚えのないものを購入されたりするのです。

盗まれ方は様々ですが、例えばセッションIDがそのままcookieに入るようなアプリケーションはよくあると思いますが、
悪意のあるサイトに誘導されてJavaScriptなどを使えば簡単に取られてしまいます。

セッションIDを使わなければ関係ないの?

ステートレス(サーバ側にユーザの情報を保持しない)の作りでセッションIDを使用しない場合、
セッションハイジャックはされないのでしょうか?
例えば最近使用されているSPAのサイトではそのような作りになっていることが多いでしょう。

Cookie等を使用せず、ユーザを識別するような情報をリクエストに付与しない場合はハイジャックされることはないですね。(それはSPAに限らず普通のサイトでもそうですが)
ただ、Cookie等にユーザの情報を含めて、リクエスト時に使用する場合はやはりなりすましができるため、同様に注意が必要です。

ステートレスのサイトでセッションハイジャックを防ぐには

ステートレスのサイトも基本的には普通のサイトと対策は一緒です。
対策は色々あり、ここでは書ききれないのですが、Cookieに入れる情報は暗号化するのは基本中の基本ですね。
たまにメールアドレスなどの個人情報がそのままCookieに保存されているものを見かけますが、それでは認証に必要な情報を教えているようなものです。
ひたすら攻撃されまくるでしょう。

また、Cookieが最悪盗まれてもワンタイムで使い回す仕組みがあればより強固になります。
ただ、自分でそこまでサイトを作り込むのは骨が折れますよね。
今はフレームワークが充実しており、認証に必要な情報はワンタイムで使いまわしているものもあるので(たぶんね)、色々探してみることをおすすめします。

どんなに対策をしても攻撃者が巧者であればなかなか防ぎようはないのですが、
Cookieはハイジャックされても心まではハイジャックされないように気をつけましょう!