Менеджер безопасности Java - что он проверяет?

В этой статье о безопасности Java говорится:

Код в библиотеке Java Менеджер безопасности, когда операция будет предпринята.

Итак, что это значит? Скажем, если я внедрил свой собственный диспетчер безопасности и включил его для всей JVM. Итак, выполняется ли java runtime для моего менеджера безопасности для каждого java-вызова (например, System.out.println() и т.д.) Или он обращается только к dangerous вызовам api, таким как System.exit(), файловые операции и т.д.?

edit: позвольте мне уточнить мой вопрос,

Я не стану сомневаться в возможностях администратора безопасности. Я просто спрашиваю, выполняются ли проверки безопасности для опасных api или выполняется для каждого вызова метода. Какой из них вызывает огромную деградацию производительности в случае приложений с большим количеством кода.

Ответ 1

Он будет обращаться к SecurityManager только в том случае, если код говорит об этом. Это не будет сделано для каждой отдельной операции.

Например, в Runtime.exit вы увидите, что с помощью SecurityManager:

public void exit(int status) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
    security.checkExit(status);
}
Shutdown.exit(status);
}

Аналогично, в File вы увидите, что большинство методов обращаются к SecurityManager. Пример:

public boolean canWrite() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
    security.checkWrite(path);
}
return fs.checkAccess(this, FileSystem.ACCESS_WRITE);
}

Если вы пишете метод, который может быть "опасным", вы также должны обратиться к SecurityManager.

Ответ 2

С помощью диспетчера безопасности вы можете контролировать доступ к:

  • Операции с файлами
  • Объект отражения
  • Чтение/запись IO
  • Операции с цепочкой потоков/потоков
  • Операции сокета (слушать, принимать и т.д.)
  • Возможность создания собственного загрузчика классов.

Для каждой такой вещи существует метод check *() в SecurityManager

Для исчерпывающего списка проверьте константы в SecurityConstants

Ответ 3

Менеджер безопасности использует файл политики, чтобы узнать, что разрешено и что не разрешено. Операции "Опасные", определенные этим файлом политики, предоставляются или отклоняются во время выполнения.

Более подробную информацию о политике по умолчанию для JVM для Sun/Oracle можно найти здесь:

http://download.oracle.com/javase/6/docs/technotes/guides/security/PolicyFiles.html