私はセッション固定/ハイジャックの危険性について多くの人が読むとphp.ini
の指示をsession.use_only_cookies
〜ON
などのphp.iniディレクティブに変更することを提案していますより安全な...テスト用ローカルホストに対する簡単なセッション固定攻撃
私は、単純な攻撃シナリオを複製することができれば、私の目で見てみたかったです私のlocalhostサーバー上でPHP5 + Apacheに基づいています。
私のlocalhost session.use_only_cookies
はOFF
です。上記のq/aより、私のlocalhostは基本的に保護されていません。これはテストを行うためのものです。記事で説明するシナリオを再現するためには
が、私は2つの非常に単純なPHPスクリプトを作成しました:
私の第一は、セッション固定攻撃を施行している方法については、この簡単な記事を読んで(コードは以下の通りです)、しかし、攻撃は動作しません、これは私がやったことです:
(マロリーするふり)私が言いますアリス:私は、サーバーのディスク上に作成されたセッションは、(それがファイルとしてセレイテッド型だ見た私のローカルホストサーバーの管理者としてhttp://localhost/login.php?PHPSESSID=mysessionid
に行ってきましたそして、
(アリスを装って)「ハローhttp://localhost/login.php?PHPSESSID=mysessionidを訪問しに行きます」
sess_ mysessionid
という名前)ので、私は思った:クール、それは働いている!その後(アリスを装って)私は資格
アリスがログインすると、彼女は
insession_ok.php
にリダイレクトされ、この時点で(上記のWikipediaの記事による)として「ジョー」を入力してログインしマロリー必要があります彼がセッションをmysessionid
、に固定したので、insession_ok.php
も見ることができますが、これは真実ではありません。新しいセッションがサーバーsess_vdshg238cnfb4vt7ahpnp1p522
に作成されるため、Malloryが固定する記事で説明されているように、セッションをハイジャックする任意<?php session_start(); if(@$_SESSION['in_session'] === TRUE) echo "in session ok"; else //user is not in session cause he did not login, let's redirect him to login page { $webpage = 'http://' . $_SERVER['HTTP_HOST'] . '/login.php'; header("Location: " . $webpage, TRUE, 302); } ?>
insession_ok.php
login.php
<?php
session_start();
//if user credentials are ok, let's put him in session
if(@$_POST['usr'] === 'joe')
$_SESSION['in_session'] = TRUE;
//if user is already logged in, let's redirect him to the account page "insession_ok.php"
if(isset($_SESSION['in_session']))
{
$webpage = 'http://' . $_SERVER['HTTP_HOST'] . '/insession_ok.php';
header("Location: " . $webpage, TRUE, 302);
}
?>
<form method="POST" action="login.php">
<input name="usr" type="text">
<input type="submit" value="Submit">
</form>
<script type="text/javascript">
alert(document.cookie); //to view cookies
</script>
手掛かり/アイデアは常に高く評価されています!