Менеджер безопасности 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