2

これは非常に奇妙に聞こえます。しかし、現在、私たちのサイトのユーザーは、この動作をランダムに見ています。

匿名でサイトを閲覧すると、別のユーザーとしてログインします。彼らは、実際に現在システムにログインしているユーザーとしてログインしました。そのユーザーに代わってすべてのアクションを実行できます。

私たちのシステムは、modx evolution 1.0.4 で組み込まれています。ログイン システムに WebLogin スニペットを使用しました。

この動作は中間者 (MITM) 攻撃で可能ですか?

アップデート

サーバー側でリクエストごとに受信したCookieとIPのリストを保存しました。異なる IP の同じ時間から同じセッション値が表示されます。この値は、session_id()を使用して生成されます。異なるマシンが同時に同じ値を取得できるのはどうしてですか?

4

6 に答える 6

2

キャッシングの問題のように聞こえるというオービトリーに同意します。WebLogin スニペットに加えて、パーソナライズされた情報を含む他のスニペットまたはチャンクがある場合は、それらもキャッシュされていないことを確認してください。そうしないと、サイトのキャッシュがクリアされた後にユーザーがログインすると、そのユーザーのスニペットによって生成されたパーソナライズされたコンテンツがページと共にキャッシュされ、すべてのユーザーに表示されます。

于 2014-05-09T16:12:46.733 に答える
2

これはキャッシングの問題のようです。[[WebLogin]] の代わりに weblogin uncached [!WebLogin!] を呼び出してみてください。

于 2014-05-09T15:35:02.840 に答える
1

php.ini ファイルでこの値を編集すると、問題が解決する場合があります

session.use_strict_mode = 1
于 2014-05-22T04:45:38.507 に答える
1

これはキャッシュに関連しているとは思いません。複数の理由が考えられます。

まず、一意のセッションを生成するためにこれらを試してください。

//For successfully truncating a session
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

//For generating a unique id for every session
session_regenerate_id(true);

また、mysql リソースが正しいユーザー ID を毎回返しているかどうかを確認してください。

于 2014-05-18T10:39:13.493 に答える
1

中間者攻撃について

HTTPあなたのサイトがプロトコルを使用している場合、外部ユーザーセッションのハイジャックが完全に可能であることに注意してください.

セッション ハイジャック攻撃から保護するには、HTTPs を有効にする必要があります。

HTTP は、要求と応答に関連するデータを単純なテキスト (暗号化されていない) として転送します。

セッション ID は Cookie または URL に保持されるため(このオプションは使用しないでください!)、攻撃された MITM はセッション ID を読み取るだけです。次に、MITM 攻撃者は自分のブラウザにセッション ID Cookie を設定し、他のユーザーの ID を所有します。

セッション ID を取得するには、MITM はサーバー システムへのクライアントのネットワーク ルートに関する特権的な場所を必要とします。攻撃者は、クライアント システムとサーバー システムの間にいる必要があります。または、クライアントのネットワークに常駐し、クライアント システムのデフォルト ルーターになるように模倣する必要があります。

セッションの問題について

modx のシステム プロパティsession_handler_classにはどのような値がありますか?

デフォルト値の場合modSessionHandler、modx はデータベース管理セッションを使用します。標準の PHP セッション処理を有効にするように modx に指示するには、設定を空白のままにします。

キャッシュの問題について

キャッシングは通常、クライアントに送信されたデータ (HTML コードなど) を保持して取得します。通常、キャッシュされたファイルには Cookie はありません。

匿名ユーザー X が別のログイン ユーザーのセッション Cookie を突然取得した場合、modx は何らかの方法で他のユーザーのセッションを見つける必要があります。

セッション ID が非常に長い場合、別のユーザーのセッション ID を推測する可能性はほとんどありません。同様に、別のユーザーの永続的なセッション データを取得する可能性はほとんどありません。

... modx が、正しい持続セッション ファイルを取得するだけでなく、すべての持続セッションのセットを何らかの方法で反復処理しない限り。

したがって: modx のセッション処理内での検索操作に注意してください。

PHP の tick 機能を使用して実行をトレースする

最後の手段として、PHP の tick 機能を有効にすることができます。

アプリの開始時にこれを行います (例: index.php 内):

declare(ticks=1);
register_tick_function('traceStatements', true);

次に、ティック関数を定義します。

function traceStatements() {

      $traceInfo = debug_backtrace();

      // Use $traceInfo to identify the last method called
      // Trace the method to a central log file
      // Create a new log file per incoming http request

}

このコードを使用すると、実行中の PHP ステートメントごとtraceStatements()に get が呼び出されます。このメカニズムを使用して、さまざまなクライアント要求のいくつかのトレースを準備し、相互に比較できます。

参考になるトレース コードについては、こちらを参照してください。

于 2014-05-22T23:30:38.113 に答える