質問: PHP初心者です PHPのセッションハイジャック対策で挙げられている session_regenerate_id(TRUE); って必要なんでしょうか
回答: >> 対象がログインしている状態であれば何らかの形でセッションIDを盗みさえできれば乗っ取りも容易ってことですよね? 目的は,セッションフィクセーションへの対策です.PHP5.2まではデフォルトでCOOKIEパラメータの代わりにGETパラメータでPHPSESSIDを受け取れるようになっていたので,うっかり誰かが仕掛けたPHPSESSIDつきのリンクを踏んでそのサイトにログインしてしまったら...ということがあり得ました.PHP5.3以降ではXSS脆弱性などが無い限り勝手にCookieをセットされるようなことはありませんが, " 公共施設で利用されるような共用PCでは,自分がこれから使うセッションIDを前に使っていた他人が知っていることになる " ...ため,依然として危険です.但し,毎回この関数を実行するのは負荷が大きいため,通常はログイン成功直後に限定します. 「そもそも通信が盗聴されていたら無意味じゃない?」という話になりそうですが,あくまでこれは通信をTLS暗号化している前提です.通信を暗号化していないセッション機構にセキュリティなんてあったもんじゃありません. [備考] PHPによる簡単なログイン認証いろいろ パスワードは絶対に平文でデータベースに格納しないように... (万が一システムに侵入されても,最重要情報であるパスワードだけは絶対に得られないようにしておくべきです.また管理者がパスワードを目視しようと思えばできるというのも問題です.)