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通信にしてクッキーにセキュア属性を付加する。
TrackBack URL :
Comments (0)
コメントはまだありません»
コメントはまだありません。
この投稿へのコメントの RSS フィード。TrackBack URL
コメントする