2012-01-05 9 views
1

私はこれを理解するのに苦労しています。私はウェブの悪用に対する私の無知は責任だと思います。セッション固定についての私の理解は次のようになります。regenerate_session_idはセッションIDを傍受する人のIDを再生成しませんか?

  • ハッカーは、現在ログインしているユーザーのセッションIDを取得するためにいくつかのエクスプロイトを使用します。
  • ハッカーがセッションを盗むし、効果的にログインし、サイトにアクセスするためのセッションIDを使用しています。

あなたがハッカーがセッションを傍受できる可能性を減らすためにregenerate_session_idを使用することをお勧めされています。今度は、regenerate_session_idをトリガーして、セッションIDでハッカーを更新しながら、元々ログインしていたユーザーを同時にログアウトしないでしょうか?これは、それが良い、より多くの害を引き起こすように思えるので、私はここに写真の何かを欠場する必要があります知っている。私は何が欠けていますか?

+0

それはすべての要求 –

+0

のセッションIDの変更は、私はまた、リクエストごとにセッションIDを変更読んだ場合、ハッカーが最初の場所でセッションをハイジャックすることができますという可能性を低下させる...それは助け望んでいるだろうそれは価値がない、それは私を混乱させる何か他のものです。強力なセキュリティを実施するのと比べてIDを再生成するのは本当にコストがかかりますか? – ACobbs

答えて

0

session_regenerate_idは、ハイジャックが通常セッションIDを盗まれた後の後のステップで発生するため、セッションのハイジャックを防ぐ良い方法です。例えば

  1. 訪問フォーラムXSSの注入は
  2. 使用リンクをクリックすると、それは
  3. ユーザーは、それは彼が望んでいたではないものだと認識したセッションを盗んでは、サイトを再生成
  4. 背中押します新しいセッションID、ユーザーは保存され、セッションIDはサーバーによって直ちに使用されないため、セッションIDは盗まれません。

もし何らかの理由で固定が生きていて、自動化されたプロセスのように非常に高速になるなら、そうではありません。これはユーザーを節約しません。このため、session_regenerate_idだけでなく、ユーザーのIPアドレスにも依存する必要があります。明らかに

if(!session_id()){ 
    session_start(); 
    if(!isset($_SESSION['user_ip'])){ 
     $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR']; 
    } 
    if($_SESSION['user_ip'] !== $_SERVER['REMOTE_ADDR']){ 
     exit('highjacking detected, session terminated'); 
    } 
    session_regenerate_id(); 
} 

ハックは、このような職場と同じネットワークから来ている場合は、IP検出はそうあなたもUserAgentのチェックを使用することができます動作しません。しかし、これはあなたのデータの感度に応じて少し過剰なものになっています。

+0

session_regenerate_id()は、最初の引数をtrueに設定して呼び出す必要があります。そうしないと、攻撃者はデフォルトでは削除されていないので、古いセッションIDを引き続き使用できます。 –

+0

@AudunLarsen感謝はそれを知らなかった:S –

関連する問題