2011-08-03 4 views
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を気密にするために必要なことは何ですか?

+0

なぜこれが驚きであるのか分かりません。これはJavadocで指定されています。 – EJP

答えて

8

は物事の少なくともカップルが私は考えることができるがあります。

  1. 誰かがアクセス可能にSystem.securityフィールドを設定するためにリフレクションを使用して、彼らが望むものは何でも、それを設定することができます。

  2. 誰かが無作為の何かをメモリに直接上書きするためにsun.misc.Unsafeを使用できます。

私は彼らの両方がField.setAccessible()への呼び出しに依存しているので、あなたのSecurityManagerは、これらの事を防ぐことができると思います。しかし、確かめるためにそれをテストすることをお勧めします。

+0

ありがとう、私はテストします。 –

+0

1.私はこれを試みました:systemSecurityField = java.lang.Class.forName( "java.lang.System")。getDeclaredField( "security");しかし、java.lang.NoSuchFieldException:security –

+0

奇妙な、それは私のために働く(Java 6、更新24を使用して)。 using: 'System.class.getDeclaredField(" security ");' – aroth

関連する問題