セッションフィクセーション 01 - yujitounai/helloworld GitHub Wiki
クエリストリングにセッションIDがある件でのセッションフィクセーション
<?php
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_name('fixsessid');
session_start();
$page=filter_input(INPUT_GET,"page");
if(!$page){
echo "<a href=\"?page=input\">input</a>";
}elseif($page==="input"){
echo <<<EOM
<div class="box">
<form method="post" action="?page=input_secret">secret
<input name="secret" type="text" value="">
<input type="submit">
</form>
</div>
EOM;
}elseif($page==="input_secret"){
$secret = filter_input(INPUT_POST,"secret");
$_SESSION['secret']=$secret;
echo "<a href=\"?page=display_secret\">display_secret</a>";
echo "<br><a href=\"?page=logout\">clear session</a>";
}elseif($page==="display_secret"){
echo "SECRET=".$_SESSION['secret'];
echo "<br><br>";
echo "<a href=\"?page=input\">input</a>";
echo "<br><a href=\"?page=logout\">clear session</a>";
}elseif($page==="logout"){
$_SESSION = array();
session_destroy();
echo "logout";
echo "<br><br>";
echo "<a href=\"?page=input\">input</a>";
}
?>
- sessionfixation-01.php を開くとsecretを入力する画面になる
- 入力するとdisplay_secretリンクが表示される
- display_secretを開くとsecretが表示される
- inputをクリックするとセッションID
fixsessid
が作成される - 発行されたセッションIDをクエリストリングに貼り付ける
sessionfixation-01.php?page=input&fixsessid=[取得したfixsessid]
- 作成したURLを別のブラウザから開く
- secretを入力する
- 元のブラウザで
sessionfixation-01.php?page=display_secret&fixsessid=[取得したfixsessid]
を開くとURLを押しつけられた側が入力したSECRET値が表示される(Cookieにfixsessidがあるとそちらが優先されるので注意)
ini_set('session.use_trans_sid', 1);
ini_set('session.use_only_cookies', 0);
はやらない
ログイン、ログインしてない場合でも重要な情報の送信後は
session_regenerate_id()
も使いたい