セッションIDの自動変更

広告

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

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

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

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

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

サンプルプログラム

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

sessiontest6.php

<?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の自動変更

PHP入門の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)