Friction River Software

  • お問い合わせ

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

A子

ねぇ、ログインセッションって、セッションIDが他人に知られた場合、その他人から不正に操作されるってことにはならないの

ブラウザからWebサーバへ送信するCookieクッキーを途中の経路で盗み見られたりすると、ちょっとやばくない?

C菜

だからこそ通信の暗号化が推奨されているんですよね~

具体的には、プロトコルとして「HTTP」ではなく「HTTPS」を使うべき…ってことです~
(BASIC認証でも「HTTPS」は必須ですけど~)

B美

まぁ、ほかにもセッション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を盗み出すってのも決して不可能じゃないのか…
(どういう方法なのかは想像もつかないけど…)

B美

そういうこと

そして盗んだセッション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をうまく取得できないのよ)

C菜

そうなんですね~

あ、でも「HTTPS」は必須ですよね~?

B美

もちろん!

それだけは絶対に譲れないわ

A子

なるほどねー

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