@blog.justoneplanet.info

日々勉強

PHP Session Security(セッションのセキュリティ)

■セッションフィクセーション

セッションのIDを固定化させる方法である。特定のリンクを第三者にクリックさせ任意のセッションIDを付加させる方法である。これにより、攻撃者は第三者のセッションIDを知ることができてしまう。

対策

まず、「php.ini」の「session.use_only_cookies」を「On」にする。

session.use_only_cookies = On

以下のように、session_start()の後すぐに、session_regenerate_id(true)関数を呼び出す。この関数は、Set-Cookieヘッダーを再度送信し、セッションIDを新しいものに置き換える。但し、デフォルトでは古いセッションファイルを削除しないため、そこまでのセッションデータは古いIDでも取り出すことができてしまう。PHP5.1以降では引数に「true」を設定することで、古いセッションファイルを削除することができる。

<?php
session_start();
session_regenerate_id(true);
?>

但し、一番初めのアクセスはIDを新しくする必要もないので、以下のようにする。

<?php
session_start();
if(!isset($_SESSION['init'])){
    session_regenerate_id(true);
    $_SESSION['init'] = true;
}
?>

■セッションハイジャック

対策1

以下のように、一つ前のリクエストと今回のリクエストのUSER AGENTを調べる。これは、リクエスト毎にブラウザがかわることはない、という前提を利用したチェック方法である。

<?php
if($_SERVER['HTTP_USER_AGENT'] !== $_SESSION['user_agent']){
    exit;
}
?>

重要

但し、ネットワークの盗聴などをされるとPHPでは防ぎきれないので、完全にセッションハイジャックを防ぎたい場合は、HTTPS通信にしてクッキーにセキュア属性を付加する。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment