質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

203閲覧

セッション固定攻撃について

rupin

総合スコア72

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

3クリップ

投稿2014/06/02 22:00

セッション固定攻撃は、どのような方法で攻撃してくるのでしょうか?

対策をしたいので、攻撃方法と対策方法を教えていただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

攻撃手法は、任意のセッションIDを強制的に利用し、攻撃します。

なので、対策方法として、ログイン時の認証が成功した段階でセッションIDの
再発行を行えばよいです。

例えば、ログイン処理の実行、終了するプログラムには、
このようなプログラムをいれます。
`
//セッションスタート
session_start();

//ユーザIDがセッション変数に存在するかチェック。存在すれば、ログインユーザ専用ページ
//一部省略します..

//ログイン処理の実行 終了
$_SESSION['user_id'] = 1   //ダミーユーザIDをセッションに格納
session_regenerate_id (true); //セッションIDを再発行する
`
ユーザーIDを格納する前に、session_regenerae_id()関数を呼びだして、
セッションIDの再発行を行っています。

これにより、ログイン前と後でセッションIDが異なるため、攻撃されたとしても、
ログイン後のセッションを乗っ取られることはなくなります。

投稿2014/06/04 07:38

topofthehub

総合スコア83

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

セッション固定攻撃の攻撃手法について、補足します。

セッションを乗っ取るには、サーバから発行されるセッション ID を盗めばいいわけですが、言ってみれば会員制の施設に入る会員証みたいなもんですよね。普通のセッション乗っ取り攻撃犯は、どうにかしてこのセッション ID を盗み出すか(会員証を盗む)、に血道を上げるわけですが、セッション固定攻撃というのは、悪意を持った人が攻撃対象の人に、セッション ID を指定してそれを使って攻撃対象のシステムにアクセスするように仕向ける(会員証を作っちゃう)わけです。そしてそのままログイン成功し、なおかつログイン成功してもセッション ID が変更されないようなら、ログイン後のセッションを乗っ取ることができるわけです。
具体的には、たとえば、
0. 本物 (仮にサイト A とする) のそっくりの偽サイト(いわゆるフィッシングサイト)P を作る
0. サイト A の利用者 U を P に誘導し、セッション ID を決め打ちでサイト A にリダイレクトさせる
0. U がそのままサイト A にログインさせる。決め打ちで作ったセッション ID でサイト A を利用し、利用者 U を乗っ取る
とかになります。

ログイン成功時にセッション ID を再発行する、というのはもちろん有効であり、なおかつ当たり前にやるべき措置ですが、それは上の 3. に絡んだ部分です。それ以外に 2. の部分でも対策を施した方がよいです。

問題は、セッション ID を外部から決められる、というところです。これ、普通に考えておかしいですよね。これも大きく二つに分けられ、「セッション ID を本当に外部から決めることができる」「発行されるセッション ID が容易に推測できる」があるかと思います。前者は、PHP の設定次第では、?PHPSESSID=xxxyyyzzzz とクエリにつけると、それをセッション ID として使ってしまう、というようなケースです。サーバ側では自分自身で発行した有効期限内のセッション ID 以外は突っぱねるべきです。後者は、セッション ID の生成方法が単純すぎる(たとえば、現在時刻に sha1 をかけただけ、とか) と、容易に推測できて有効なセッション ID を攻撃者が知ってしまう、というものです。

投稿2016/04/05 04:10

編集2016/04/05 10:12
unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問