SecurityManager сюрпризы - PullRequest
       4

SecurityManager сюрпризы

5 голосов
/ 03 августа 2011

Я хотел создать очень строгий менеджер безопасности, поэтому я расширил 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 герметичным?

1 Ответ

8 голосов
/ 03 августа 2011

Есть как минимум пара вещей, о которых я могу подумать:

  1. Кто-то может использовать отражение, чтобы установить поле System.security доступным, а затем установить его на то, что он хочет.

  2. Кто-то может использовать sun.misc.Unsafe , чтобы напрямую перезаписать ваш экземпляр в памяти любым произвольным образом.

Я думаю, что ваш SecurityManager может защититься от этих вещей, так как они оба полагаются на звонки на Field.setAccessible(). Но лучше проверить это, чтобы убедиться.

...