3

Java RMI (Cajo プロジェクト経由) を使用するクライアント サーバー ソリューションを作成しています。

サーバーをできるだけ安全にしたい。Java リフレクションを使用することにより、悪意のあるクライアントは、RMI レジストリにバインドされているか、サーバーから「プロキシ」されている任意のオブジェクト内のすべてのメソッド名とフィールド名を表示できることを理解しています (Cajo では、プロキシされたアイテムは実際にはサーバー上に存在するオブジェクトですが、クライアントはそれを参照できます)。しかし、悪意のあるクライアントは、プログラム ロジックを表示したり、サーバー上のコードを変更したりできますか? または、フィールドの実際の内容を表示するにはどうすればよいでしょうか?

サーバーへの物理的なアクセスは許可されておらず、サーバーへの唯一のネットワーク アクセスは Cajo TCP ポート (1198) 経由であると想定してください。

ありがとう

4

2 に答える 2

2

RMI は、プロキシ オブジェクトとシリアル化に基づいています。

  • プロキシ オブジェクト: これらには、インターフェイスで指定されたメソッドのみが含まれます。元のオブジェクトの他のすべてのメソッドとフィールドはプロキシ内に存在せず、リフレクション経由でアクセスできません。すべてのメソッドがインターフェイスで既に公開されているため、攻撃は不可能です。

  • シリアル化されたオブジェクト: サーバー側の値の 1 対 1 のコピーです。すべてのメソッドとフィールドはクライアントでアクセスできますが、両方のコピーが独立しているため、クライアントのコピーへの変更はサーバーに転送されません。フィールドが変更されたオブジェクトは引き続き RMI メソッドの引数として使用できるため、サーバーで入力を検証してください。

于 2010-11-02T08:53:32.583 に答える
0

Java リフレクションを使用することにより、悪意のあるクライアントは、RMI レジストリにバインドされているか、サーバーから「プロキシ」されている任意のオブジェクト内のすべてのメソッド名とフィールド名を表示できることを理解しています。

正しい。しかし、それらのフィールドは何ですか?プロキシされるメソッドの IP アドレス: ポートといくつかのマジック ナンバーだけです。クライアントが通常の方法で使用できないものは何も公開されていません。

しかし、悪意のあるクライアントは、プログラム ロジックを表示したり、サーバー上のコードを変更したりできますか?

いいえ。プロキシ経由以外でサーバーにアクセスすることはできません。実際のリモート オブジェクトの実装はまったく見えません。

または、フィールドの実際の内容を表示するにはどうすればよいでしょうか?

いいえ、同じ理由です。

于 2010-11-02T08:29:22.633 に答える