CakePHP5入門【コラム⑪】セッションハイジャック

A子
ねぇ、ログインセッションって、セッションIDが他人に知られた場合、その他人から不正に操作されるってことにはならないの
ブラウザからWebサーバへ送信するCookieを途中の経路で盗み見られたりすると、ちょっとやばくない?
ブラウザからWebサーバへ送信するCookieを途中の経路で盗み見られたりすると、ちょっとやばくない?

C菜
だからこそ通信の暗号化が推奨されているんですよね~
具体的には、プロトコルとして「HTTP」ではなく「HTTPS」を使うべき…ってことです~
(BASIC認証でも「HTTPS」は必須ですけど~)
具体的には、プロトコルとして「HTTP」ではなく「HTTPS」を使うべき…ってことです~
(BASIC認証でも「HTTPS」は必須ですけど~)

B美
まぁ、ほかにもセッションIDを盗み見る方法はあるけどね(苦笑)
例えば、「クロスサイトスクリプティング攻撃」とか「セッション固定攻撃」とか…
(セッションフィクセーションは盗み見るんじゃなくて、攻撃者が決めたセッションIDを強制するやり方だけどね)
例えば、「クロスサイトスクリプティング攻撃」とか「セッション固定攻撃」とか…
(セッションフィクセーションは盗み見るんじゃなくて、攻撃者が決めたセッションIDを強制するやり方だけどね)

C菜
ブラウザ上でセッションIDを確認する方法はあるのでしょうか~?

B美
ブラウザソフトによって異なるけど、Windows10の「Edge」であれば次の手順で調べられるわよ
1.メニューの「設定」を選択し、設定ページを開く
2.左のメニューから「Cookieとサイトのアクセス許可」をクリックし、右にある「Cookieとサイトデータの管理と削除」を選択 3.「すべてのCookieとサイトデータを表示する」をクリック 4.開発環境のIPアドレス(ここでは「192.168.1.205」)の右側にある「∨」をクリック 5.もう一つ同じIPアドレスが表示されるので、右側にある「>」をクリック 6.「PHPSESSID」の右側にある「∨」をクリック 7.表示された情報の中の「コンテンツ」の値がセッションID |

↓

↓

↓

↓

↓


C菜
実際のセッションIDをデータベーステーブルに格納した値で確認してみるです~


A子
おぉ!
たしかに一致してるじゃん
そっかぁ、こうやって(ブラウザ上でも)セッションIDを調べることができるんだね
んー
だとすると、何らかのテクニックを駆使してセッションIDを盗み出すってのも決して不可能じゃないのか…
(どういう方法なのかは想像もつかないけど…)
たしかに一致してるじゃん
そっかぁ、こうやって(ブラウザ上でも)セッションIDを調べることができるんだね
んー
だとすると、何らかのテクニックを駆使してセッションIDを盗み出すってのも決して不可能じゃないのか…
(どういう方法なのかは想像もつかないけど…)

B美
そういうこと
そして盗んだセッションIDでログインセッションを横取りすることをこう呼びます
「セッションハイジャック」と…
そして盗んだセッションIDでログインセッションを横取りすることをこう呼びます
「セッションハイジャック」と…

A子
旅客機でもぶんどるのかよ(笑)
てか、どういう対策をとれば良いのさ
てか、どういう対策をとれば良いのさ

B美
1.URLの中でセッションIDを指定しない
2.推測されにくいセッションIDを使用する 3.ログイン後、セッションIDを再取得する(セッション固定攻撃対策) |
などが、広く一般に浸透しているセッションハイジャック対策かな

C菜
CakePHPでも対策しなきゃいけないのでしょうか~?

B美
うん、これらをふまえて自分でCakePHPのWebアプリケーションを攻撃してみたんだけどね
結局、ダメだったよ
結局、ダメだったよ

A子
え?やばいじゃん
ちゃんと対策しないと!
ちゃんと対策しないと!

B美
あ、違う違う
全く攻撃が通らなかったのよね(苦笑)
(特に3番なんか、何の対策もしてないのに無理だった)
さすがはWebフレームワークであり、Authenticationプラグインだと思ったわ
(フレームワークを使わない場合、自力で対策しなきゃいけないからね)
余談だけど、1番についてはPHPというプログラム言語自体が禁止しているわ
(「php.ini」の「session.use_only_cookies」の設定)
あと、3番は「CakePHP5」のデフォルト状態で(勝手に)対策済みらしいし…
(だからこそ「login」メソッド内ではセッションIDをうまく取得できないのよ)
全く攻撃が通らなかったのよね(苦笑)
(特に3番なんか、何の対策もしてないのに無理だった)
さすがはWebフレームワークであり、Authenticationプラグインだと思ったわ
(フレームワークを使わない場合、自力で対策しなきゃいけないからね)
余談だけど、1番についてはPHPというプログラム言語自体が禁止しているわ
(「php.ini」の「session.use_only_cookies」の設定)
あと、3番は「CakePHP5」のデフォルト状態で(勝手に)対策済みらしいし…
(だからこそ「login」メソッド内ではセッションIDをうまく取得できないのよ)

C菜
そうなんですね~
あ、でも「HTTPS」は必須ですよね~?
あ、でも「HTTPS」は必須ですよね~?

B美
もちろん!
それだけは絶対に譲れないわ
それだけは絶対に譲れないわ

A子
なるほどねー
そういう知識が深まっていくほど、「面白い!」と感じるようになるね
(ちょっと不謹慎だけど…(苦笑))
そういう知識が深まっていくほど、「面白い!」と感じるようになるね
(ちょっと不謹慎だけど…(苦笑))