5

非常に制限の厳しいセキュリティマネージャーを作成したかったので、SecurityManagerを拡張し、すべてのカスタムcheckXXXメソッドをオーバーライドしました。

しかし、その後、セキュリティマネージャが役に立たないことがわかりました。なぜなら、誰でも次のことができるからです。

System.setSecurityManager(null);

だから私は追加する必要があります:

@Override    public void checkPermission(Permission perm)  {
    if (perm.getName().equals("setSecurityManager")) {
        throw new SecurityException("You shall have no other security manager but me!");
    }
}

これ以上の驚きはありますか?SecurityManagerを気密にするために他にやらなければならないことはありますか?

4

1 に答える 1

8

私が考えることができる少なくともいくつかのことがあります:

  1. 誰かがリフレクションを使用してSystem.securityフィールドをアクセス可能に設定し、それを好きなように設定できます。

  2. 誰かがsun.misc.Unsafeを使用して、メモリ内のインスタンスを必要なランダムなもので直接上書きする可能性があります。

SecurityManagerどちらも への呼び出しに依存しているため、これらを防ぐことができると思いますField.setAccessible()。しかし、それを確認するためにテストすることをお勧めします。

于 2011-08-03T05:30:26.777 に答える