5

許可されていJavaないクラスに提供したくない機密情報を含むクラスがあります。

一部のパッケージでこのクラスにアクセスしたい(このパッケージのクラスは機密情報を利用する予定です)。そのため、これらのパッケージで安全なクラスにアクセスできるようにする必要があります。

メソッドの呼び出し元が許可されたパッケージの許可されたクラスであるかどうかを確認する方法はありますか?

私はpublic/private / defaultのすべてを知っていますが(使用するように言わないでください)、一部のパッケージ(1つ/同じではない)でクラスにアクセスできるようにしたいので、ここでは役に立ちません。

4

6 に答える 6

5

間違った方向に進んでいると感じます。設計上の問題かもしれません。

セキュリティ要件はビジネス ロジックです。Java 言語レベルの可視性修飾子や呼び出し元のパッケージ名に依存するのではなく、何らかの方法でセキュリティ ポリシーを実装する必要があります。あなたの瓶を誰かに渡した場合、彼はとにかくあなたの「機密」クラスにアクセスできるからです。

さらに、クラスは型であり、抽象的なものです。「データ」を含めないでください。確かに conf 情報は static 変数などとして記述されることもありました。データベースや暗号化されたファイルなどに保存できます。機密情報への要求が来たら、それらのデータへのアクセスが許可されているかどうか、実装されているセキュリティ ポリシーを確認します。

ちょうど私の2セント

于 2012-10-09T12:15:46.670 に答える
2

Java の可視性修飾子はセキュリティ ツールではなく、OO 設計ツールです。何をするにしても、誰かがあなたのクラスを使用すると、リフレクションを使用して任意のクラスのプライベート メンバーにアクセスできます。

オブジェクトに機密情報が含まれている場合は、これらのオブジェクトを安全なサーバーに残してください。

于 2012-10-09T11:56:28.813 に答える
1

を作成しException(スローする必要はありません)、 を使用しgetStackTrace()てコール スタックを分析できます。私はいつもそれが醜いと思っていました。

とはいえ、クライアント マシンに配置したものはすべて、そのマシンに対して脆弱です。本当に機密性の高いものがある場合は、サーバーで保護してください。サービスとしてのみ利用できるようにします。

于 2012-10-09T11:55:44.727 に答える
0

ここでaspectjを活用できるかもしれません。理論的には、現在のフロースコープに基づいて特定のクラスのメソッドへの呼び出しをインターセプトし、アスペクトに例外などをスローさせることができます。私はaspectjの専門家ではありませんが、「cflow」ポイントカット修飾子が最も可能性の高い賭けです。多分このようなもの

!cflow(call(* com.mycom.AllowedClient。*))

私はこの種のポイントカットをテストしていませんが、うまくいくと思います。

ただし、この場合は、コンパイル時のウィービングが必要になる可能性があります(ロード時のウィービングではありません)。

ちなみに、これは間違ったアプローチだと思う他の人たちのいくつかに同意します。データを保護します。ログインしたユーザー権限に基づいて機能アクセスを保護しました。通常、他のクラスからの関数呼び出しは保護しません。

于 2012-10-09T14:14:56.717 に答える
0

Java のProxyクラスによって実装されたプロキシ パターンを使用できます。これは目的に合わせて設計されています。

これがハウツーです。

編集:私の知る限り、プロキシとプロキシされたクラスは共通のインターフェースを実装する必要があるため、静的メソッドに通常のプロキシメカニズムを使用することはできません。ただし、より高度なツールがあり、 javassistが好きになるのに役立つ場合があります。残念ながら、私自身はよく知りません。

于 2012-10-09T11:53:54.610 に答える