私は Web サイトで作業しており、ユーザーのログインとセッションを作成したいと考えています。セッションが存在するかどうかを確認する最も安全な方法 (Cookie やセッション変数のチェックなど)、または PHP でセッションを使用するよりも良いアイデアは何ですか?
2 に答える
session_id()
現在のセッションのセッション ID、または現在のセッションがない (現在のセッション ID が存在しない) 場合は空の文字列 ("") を返します。
ただし、それはセッションがアクティブかどうかを示しているだけです。
ほとんどの場合、すべてのスクリプトの最初に呼び出しsession_start();
ます (ユーザーがログインしていなくても)。ログイン時に$_SESSION['user']
、ユーザーIDまたはユーザーオブジェクトで設定しました。ログアウト時に、私はただunset($_SESSION['user']);
. チェックするempty($_SESSION['user'])
ことで、誰かがまだログインしているかどうかを確認できます。セッションの他の場所にユーザー依存の情報を保存している場合は、これを行わないでください。そうしないと、次にログインする人が、表示されないはずの情報を取得する可能性があります (この場合は を使用しますsession_destroy();
)。
でも安全?GET/POST URL の書き換え (Cookie のみ) によるセッション ID の伝播を無効にするだけで、URL がキャッシュされたり、他のユーザーに配布されたりすることはありません (この場合、セッション ハイジャックが可能になります)。session.use_only_cookies
これは、php.ini で設定することで実行できます。
信頼されていない、または構成が誤っている共有サーバーでホストしている場合、安全性の問題がさらに発生する可能性があります。同じマシン上の他の人がセッション データを読み取る可能性があります。この場合、セッション ハンドラを書き直すことで、セッション データをデータベースに保存できます。インターチューブで検索するだけsession handler mysql
で、すぐに使えるソリューションが十分にあると確信しています。パスワードなどの機密情報をセッションに保存しないでください。比較する必要があるたびにクエリを実行することをお勧めします。
それ以外は...ログインとユーザー管理にssl / httpsを使用するため、平文のパスワードは転送されません。データベースにsaltを含むpwハッシュのみを保存します。パスワードを誰にも見られないようにします (つまり、パスワードを html や電子メールに出力しないでください)。ユーザーが見ることができる (したがって、推測できる) ID に auto_increment 値を使用しないでください。わかりました、それはすでに質問の範囲外です。
セッションの安全性に関するチュートリアルを次に示します。