セッションIDの自動変更

広告

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

「session_regenerate_id」関数は、現在使っているセッションを終了させることなくセッション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 )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。