8

アプリケーションサーバープロセスを実行しているユーザーの権限でJavaWebアプリケーションを保護するだけで十分ですか、それとも適切なポリシーファイルでSecurityManagerを使用することも合理的ですか。

私は前者を使用し、後者は使用していませんが、一部のお客様は、すべてのサードパーティコンポーネントに明示的にアクセス許可を付与するSecurityManagerを使用して、そこに悪意のあるコードが潜んでいないことを確認したいと考えています。

私は、ResinのようないくつかのサーブレットコンテナがSecurityManagerを使用して速度を落とさないことを提案しているのを見てきました。何かご意見は?

4

3 に答える 3

10

セキュリティ機能を使用しないことをお勧めするのは嫌ですが、SecurityManagerは、信頼できないコードやサードパーティのコードがJVMで実行されている状況を管理することを目的としていると思います。アプレット、またはホストされた共有アプリサーバーのシナリオを考えてみてください。アプリサーバーを完全に制御していて、他の人のコードを実行していない場合は、冗長だと思います。SecurityManagerを有効にすると、私の経験ではパフォーマンスに大きな影響があります。

于 2009-08-25T09:57:31.943 に答える
2

あなたの質問に対する単純なyes/noの答えはありません。なぜなら、それは本当に依存しているからです。何を保護したいのか、そして何から保護したいのか。

たとえば、SecurityManagerを使用してIPフィルタリングを実装し、ホワイトリストに登録されたIPアドレスのみがアプリケーションに接続できるようにしました。ディスクファイルへのアクセスを禁止したいだけの場合は、権限の少ないユーザーとしてアプリケーションを実行する方が良い解決策かもしれません。

サードパーティのプラグインをまったく信頼しない場合は、プラグインコードの実行を許可すると、SecurityManagerを使用している場合でも、必要に応じてそのプラグインがアプリケーションをクラッシュさせる可能性があることに注意してください。アプリケーションがプラグインをロードする場合は、プラグインをホワイトリストに登録し、プラグインをロードする前にリストを確認することをお勧めします。

これを使用する場合は、パフォーマンスが低下します(JVMはより多くのチェックを実行するため)が、実行速度は、チェックを実行するコード/構成によって異なります。私のIPホワイトリストは、単一のリストルックアップしか含まれていないため、かなり高速でした。チェックにリモートWebサービスの呼び出しとデータベースへのアクセスが含まれている場合、処理速度が大幅に低下する可能性がありますが、一方で、十分なハードウェアがあり、同時ユーザーが少ない場合(つまり、余裕がある場合)は問題になりません。 。

于 2009-08-25T10:27:42.710 に答える
2

JavaでSecurityManagerを正しく設定するのは難しい場合があります。たとえば、セキュリティマネージャ自体を制限しない場合、セキュリティマネージャをnullに設定するだけで、すべてのセキュリティをバイパスできます。

セキュリティマネージャを使用することは、JVMが信頼できないコードを実行する場合にのみ意味があります。そうでない場合は、各機能(RMI、ソケット、I / Oなど)に設定する必要がある権限を事前に知っておく必要があるため、設定が面倒です。 )および各クライアント用。

于 2009-08-25T11:09:26.557 に答える