セッション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がどんどん変わっていくことが確認できます。
( Written by Tatsuo Ikura )
PHPBook