2

私は Web サイトで作業しており、ユーザーのログインとセッションを作成したいと考えています。セッションが存在するかどうかを確認する最も安全な方法 (Cookie やセッション変数のチェックなど)、または PHP でセッションを使用するよりも良いアイデアは何ですか?

4

2 に答える 2

8

session_id()現在のセッションのセッション ID、または現在のセッションがない (現在のセッション ID が存在しない) 場合は空の文字列 ("") を返します。

http://de.php.net/manual/en/function.session-id.php

ただし、それはセッションがアクティブかどうかを示しているだけです。

ほとんどの場合、すべてのスクリプトの最初に呼び出し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 値を使用しないでください。わかりました、それはすでに質問の範囲外です。

于 2009-04-15T16:23:54.997 に答える
1

セッションの安全性に関するチュートリアルを次に示します。

于 2009-04-15T15:53:41.170 に答える