23

登録/ログインできるWebサイトを作成しました。Chrome の開発者ツールで PHPSESSID Cookie を確認できるので、このセッション ID 値を使用して、ログインしているアカウントをハイジャックする方法を考えています。

セキュリティで保護された Web サイトは、このセッションがハイジャックされていることを判断し、それを防止できる必要がありますか?

また、PHP を使用する他の大きなサイト (Facebook など) に PHPSESSID Cookie がないのはなぜですか? 彼らはあいまいさのために別の名前を付けていますか、それともまったく別のメカニズムを使用しているだけですか?

4

3 に答える 3

20

良い質問がたくさんあります。質問してくれてありがとう。

まず..セッションは単なるクッキーです。「セッション」は、HTTP スタックの一部ではありません。PHP はたまたま Cookie の操作を簡単にするいくつかの便利さを提供しているため、セッションが導入されています。PHP は、Cookie のデフォルト名として PHPSESSID を選択しますが、任意の名前を選択できます。PHP でも、session_name を変更できます。

攻撃者がしなければならないことは、ユーザーが見ているセッション Cookie を取得し、それを独自のブラウザーで使用することだけです。攻撃者は、自動化されたスクリプトを使用するか、たとえば firebug を使用して、現在の Cookie 値を変更するだけでこれを行うことができます。

そうです、あなたの ID を持っていれば..あなたがそれを防ぐために何もしなければ、私はあなたのセッションを盗むことができます。

ただし、攻撃者にとって最も難しいのは、最初に Cookie を取得することです。次の場合を除き、攻撃者は実際にこれを行うことはできません。

  • 彼らはあなたのコンピュータにアクセスできます
  • 彼らはどういうわけか、ネットワーク トラフィックをのぞき見することができます。

最初の部分は解決が難しい.. セッションを開始したコンピューターを特定するためにできるいくつかのトリックがあります (ユーザー エージェントが変更されたかどうかを確認し、IP アドレスが変更されたかどうかを確認します)。

2 番目の問題は、すべてのトラフィックが HTTPS を使用して暗号化されていることを確認することで修正できます。HTTPS を使用しない理由はほとんどありません。サイトに「ログイン」エリアがある場合は、SSL を使用してください!!

この種の答えがあなたの質問に答えられることを願っています..私が今考えた他のいくつかの指針:

  • ユーザーがログインするたびに、新しいセッション ID を与える
  • ユーザーがログアウトするたびに、新しいセッション ID も付与してください。
  • ブラウザがセッション Cookie の値を特定できない状況が発生しないようにしてください。Cookie を認識できない場合は、新しい Cookie を再生成してください。
于 2012-08-05T20:38:09.133 に答える
6

同じ IP で同じブラウザを使用している場合は、セッション ID を複製するだけです (おそらく他の Cookie 値: エージェント文字列などのブラウザ固有のものを追跡/比較するかどうかはよくわかりません。これは実装です)。依存)。

一般に、ユーザーを追跡するにはさまざまな方法があります (最終的には単なるユーザー追跡です)。たとえば、Web ページ内で Cookie や隠し値を使用できます。HTTP GET 要求、Flash Cookie、またはその他の認証方法 (またはこれらの組み合わせ) で値を使用することもできます。

Facebook の場合、複数の Cookie 値を使用するため、これらの値の 1 つ (「xs」など) を使用すると仮定します。

全体として、それを行うための100%安全な方法はありません(たとえば、中間者攻撃による)が、全体として、私は次のことを行います:

  • ログイン時に、ユーザーの IP アドレス、ブラウザー エージェント文字列、および一意のトークンを保存します (上記のコメントによる編集: IP アドレスをスキップすることもできます。全体の安全性が少し低下します)。
  • クライアント側は、ユーザーの一意の ID (ユーザー ID など) とそのトークン (Cookie または GET 値) を保存します。
  • 最初のステップで保存されたデータが一致する限り、それは同じユーザーです。ログアウトするには、データベースからトークンを削除するだけです。

ああ、一言だけ言っておきますが、これらはすべて PHP 固有のものではありません。これらは、任意のサーバー側言語 (Perl、PHP、Ruby、C# など) またはサーバー全般で実行できます。

于 2012-08-05T20:41:00.367 に答える
2

誰かがセッションIDCookieを盗聴し、後続の要求のために設定します。それがユーザーを認証した唯一のものである場合、ユーザーはログインしています。

ほとんどのサイトは、何らかの形式のCookieに基づく認証を使用します。ユーザーがログインするときにユーザーのブラウザに関する情報(ユーザーエージェント、IPアドレスなど)を保存するなど、これをより安全にする方法はいくつかあります。他の誰かが素朴にCookieをコピーしようとすると、機能しません。(もちろん、これを回避する方法もあります。)また、セッションCookieが定期的に再生成され、特に長期間有効でないことを確認します。

セッションハイジャックを実行するFirefox拡張機能についてはFiresheepをチェックしてください。私はあなたがそれを使うことを提案していません、しかしあなたはそのページの議論が面白いと思うかもしれません。

于 2012-08-05T20:31:41.933 に答える