|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
セッションIDの出力には、XSS対策のためstrip_tags関数を通したものを出力することが推奨されています。ただし、HTMLタグの内側にその値が含まれる場合、htmlspecialchars関数を使用する必要があります。
携帯端末など、Cookieが使えない場合でもSessionを使用したい場合があります。この場合、基本的にGETパラメータやHIDDEN等を使ってセッションIDを「持ち回す」必要があります。単純に考えると、以下のようなコード(カウンタのサンプルです)になるかと思います。なお、Webブラウザでテストするときは、CookieをOFFにしてください。
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
}
$_SESSION['count']++;
echo 'セッションID=' . session_id() . '<br />';
echo 'count=' . $_SESSION['count'] . '<br />';
echo '<a href="session.php?'
. session_name() . '=' . strip_tags(session_id())
. '">次へ</a>';
?>
しかし、毎回URLに埋め込んだりするのはちょっと面倒です。そこで、PHPのconfigureのときに「--enable-track-sid」オプションを付けてmakeする、あるいはphp.iniのsession.use_trans_sidを1に設定してみてください。そうすると以下のようにセッションIDを埋め込む必要がありません。HTMLフォームの場合でもhiddenタグが追加されます。
PHP 4.3.1以下のバーションではセッションIDにHTMLタグを含めた場合にクロスサイトスクリプティングが可能になってしまう問題が報告されています。当該バージョンではsession.use_trans_sidを使用しないでください。
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
}
$_SESSION['count']++;
echo 'セッションID=' . session_id() . '<br />';
echo 'count=' . $_SESSION['count'] . '<br />';
echo '<a href="session_trans_sid.php">次へ</a>';
?>
実際のリンク先がHTMLファイルであろうが、イメージファイルであろうが、なかば強制的に(?)セッションIDが付加されます。なお、セッションIDの漏洩を防ぐため、「http://」から始まるURLの場合には付加されません。また、Cookieが有効な場合、セッションIDは付加されません。
|