セッションIDの自動変更

広告

セッションは便利ですがセッションIDが漏洩すると、別の人にセッションを乗っ取られる可能性もあります。そこでセッションIDを絶えず変更することでセキュリティを向上させることができます。

「session_regenerate_id」関数は、現在使っているセッションを終了させることなくセッションIDだけを新しい値に置き換えてくれます。

session_regenerate_id
bool session_regenerate_id ( [bool delete_old_session] )
session_regenerate_id() は現在のセッションIDを 新しいものと置き換え
ます。その際、現在のセッション情報は維持されます。

パラメータ:
  delete_old_session  関連付けられた古いセッションを削除するかどう
    か。デフォルトは FALSE です
戻り値:
  成功した場合に TRUE を、失敗した場合に FALSE を返します。

PHP5.1以降になって古いセッションを削除することが引数で指定することで出来るようになりました。古いセッション情報を残しておくことは資源の無駄であると同時にセキュリティ的にもよくないため、引数の「delete_old_session」はTRUEに指定することが望ましいと思います。

サンプルコード

では実際に試してみます。

<?php
    session_start();
    $old_id = session_id();

    session_regenerate_id();
    $new_id = session_id();
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

    if (!isset($_COOKIE[session_name()])){
        print('初回の訪問です。セッションを開始します。');
    }else{
        print('前のセッションIDは '.$old_id.' です。<br>');
        print('今のセッションIDは '.$new_id.' です。<br>');
    }

?>

</body>
</html>

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

セッションIDの自動変更

またブラウザの再読み込みを行うと下記のようにセッションIDがどんどん変わっていくことが確認できます。

セッションIDの自動変更

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。