2013-04-09 11 views
22

私はIPアドレスをロックします。PHPロックされたIPアドレス

これは、ユーザーよりも同じIPアドレスでしかログインできないことを意味しますか?または、ユーザーがログアウトし、新しいセッションを取得するために再ログインする必要がありますか?

if (isset($_SESSION['last_ip']) === false) { 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
} 

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 

答えて

13

このコードは、ユーザーのIPアドレスが変更された場合、セッション(ログアウト)を削除します。

したがって、ユーザーは任意のIPアドレスからログインできますが、変更された場合はログアウトされます。

これはセッションのハイジャックを防ぐために働く可能性がありますが、IPが変化し続けるため動的IPを使用しているとうまく動作しません。

+0

セッションが削除された場合、ユーザーはログインすると新しいIPから新しいセッションを取得できます。 –

+0

はい、そうです。 – Halcyon

+0

私はsession_regenerate_id(true)を追加しています。これらの2つはどのように連携して動作していますか? –

8

です。ユーザーのIPが変更されると、彼はログアウトされます。攻撃者はそれを知っていればIPを模倣することができますが、完全に安全ではありません。セッションハイジャックを防ぐ方法の詳細については以下のページを見てみましょう:

私も非常にお勧めしますクリス・シフレットセッションハイジャックの彼の記事は、ここで見つけることができます:上記のコード

http://shiflett.org/articles/session-hijacking

1
if (isset($_SESSION['last_ip']) === false) { 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
} 

はセッション「last_ip」はまだ作成されていない場合は、それが作成され、ユーザの現在のIPの値を格納することを意味します。上記のコード

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 

「last_ip」のセッション値は、あなたの現在のIPに等しくない場合、それはすべてのセッション変数(session_unset)を解放し、セッション(session_destroy)に登録されたすべてのデータを破壊することを示しています。

実際のシナリオを説明しましょう。

あなたのウェブサイトにアクセスするので、最初に ブロックのコードが私の現在のIPを保存します。今すぐ私のインターネットが切断されました と私は私のISPに再接続してdhcpを有効にして、新しいIPを に与えます。あなたのウェブサイトにもう一度アクセスすると、コードの2番目のブロックが私が別のIPを持っていることをチェックするので、私はログアウトします。

また、セッション "last_ip"がまだ作成されていない場合は、PHPの通知を投げないように、2番目のコードブロックを編集してください。

if (isset($_SESSION['last_ip']) && $_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 
関連する問題