2011-09-30 3 views
6

セッションでユーザーのIDをどのようにホストする必要がありますか? IDを挿入するだけですか?私は(例えば):セッションインジェクション?

$_SESSION['id'] = 1; 

あなた自身で(クッキーとして)変更する方法はありませんか?もしそうなら、彼はどんなidにも変えることができるからです。

もう1つ質問があります。ユーザーが(セッションで)ログインしているかどうかを確認するにはどうすればよいですか?私は、セッションを作成しました:

$_SESSION['is_logged_in'] = true; 

ここでも、ユーザーは、ちょうど彼の名前は「is_logged_in」で、彼の値がtrueのセッションを作成することはできませんか?またはサーバーだけがサーバーの値についての制御を持っていますか?

+4

を参照してください:[PHPセッションの固定/ハイジャック](http://stackoverflow.com/questions/5081025/php-session-fixation-hijacking#5081453) –

+1

それは動作するはずの方法は、セッションが制御され、サーバーのみ。そうではありませんが、ユーザは自分の名前が 'is_logged_in' *であるセッションを作成することはできないべきであり、あなたのセッション方法論に深刻な欠陥がない限り、記述する方法でセッションに影響します。 –

+1

'$ _SESSION'の値はserversideだけに保存​​されています。ユーザーは、セッションIDを含むPHPSESSID Cookieのみを受信します。 PHPはこれを使用してセッションストア内のデータを検索します。 –

答えて

12

PHPのすべてのセッション変数は、サーバー側に格納されています。 クライアントは、使用するセッションを参照するCookieを格納し、サーバーはそのセッションの値を検索します。 is_logged_inをセッションに格納しても、ユーザーIDに格納しても安全です。

注意すべきことは、別のユーザーが別のユーザーのセッションCookieを保持している場合、セッションがタイムアウトするまでそのユーザーを真似できることです。 1つの簡単な解決策はセッションをIPにリンクすることです。

+0

@Charles [回答](https://security.stackexchange.com/questions/14093/why-is-passing-the-session-id-as-url-parameter-insecure#14094)を確認してください。 "セッションをIPアドレスにロックすると、誤って人を疎外させる可能性があります。" – another