ここから本文です

PHP初心者です PHPのセッションハイジャック対策で挙げられている session_reg...

unc********さん

2016/4/2415:39:14

PHP初心者です

PHPのセッションハイジャック対策で挙げられている
session_regenerate_id(TRUE);

って必要なんでしょうか

というのも自分でセッションを使った簡易なログインシステムを作りまして、
index.phpからユーザー名とパスワードを入力してDBからユーザー名とパスワードが取り出せたらlogin.phpにいけるというシステムなんですが

ヘッダー情報を閲覧するツールを使いまして。
ログインした際にヘッダー情報に流れるPHPSESSIDを使って
curl --cookie "PHPSESSID=セッションID" localhost/login.php
みたいな感じにクッキー情報にセッションIDを入れてcurlを打ったらログイン画面の内容が表示されました
○○○さん(ユーザー名)こんにちは。 みたいな感じです

session_regenerate_id(TRUE);
を使っていたのでPOSTする際にセッションIDを毎度発行してくれると思ったのですが
同じセッションIDをヘッダー情報に混ぜてもログインできたのでこれはつまり対象がログインしている状態であれば何らかの形でセッションIDを盗みさえできれば乗っ取りも容易ってことですよね?

session_regenerate_id(TRUE);の意味ってなんなんでしょうか
何か根本的な事を理解してない事は自覚してるのですがパっとしません。・。・・

閲覧数:
121
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

mpywさん

2016/4/2522:46:18

>> 対象がログインしている状態であれば何らかの形でセッションIDを盗みさえできれば乗っ取りも容易ってことですよね?

目的は,セッションフィクセーションへの対策です.PHP5.2まではデフォルトでCOOKIEパラメータの代わりにGETパラメータでPHPSESSIDを受け取れるようになっていたので,うっかり誰かが仕掛けたPHPSESSIDつきのリンクを踏んでそのサイトにログインしてしまったら…ということがあり得ました.PHP5.3以降ではXSS脆弱性などが無い限り勝手にCookieをセットされるようなことはありませんが,

" 公共施設で利用されるような共用PCでは,自分がこれから使うセッションIDを前に使っていた他人が知っていることになる "

…ため,依然として危険です.但し,毎回この関数を実行するのは負荷が大きいため,通常はログイン成功直後に限定します.

「そもそも通信が盗聴されていたら無意味じゃない?」という話になりそうですが,あくまでこれは通信をTLS暗号化している前提です.通信を暗号化していないセッション機構にセキュリティなんてあったもんじゃありません.


[備考] PHPによる簡単なログイン認証いろいろ
http://qiita.com/mpyw/items/bb8305ba196f5105be15

パスワードは絶対に平文でデータベースに格納しないように…
(万が一システムに侵入されても,最重要情報であるパスワードだけは絶対に得られないようにしておくべきです.また管理者がパスワードを目視しようと思えばできるというのも問題です.)

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる