Поскольку заголовок вопроса чрезвычайно широк, я добавлю еще одну полезную практику, которую следует учитывать при использовании системных свойств. Доступ к системным свойствам может быть запрещен SecurityManager
, поэтому вам может потребоваться доступ к ним через PrivilegedAction
, , например:
String tmpdir = AccessController.doPrivileged(new PrivilegedAction<String>() {
public String run() {
return System.getProperty("java.io.tmpdir");
}
});
Используйте привилегированное действие, когда ваш код ограничивает чувствительное действие, чтобы оно было безопасным, даже если вредоносный код вызывает его.
Например, было бы небезопасно использовать привилегированное действие в методе, подобном OutputStream open(File file)
. Ненадежный код может вызывать его и использовать привилегии вашего кода для написания чего угодно и где угодно.
Однако, если бы у вас был метод, который сохранял пользовательские настройки вашего приложения в выбранном вами файле, это, вероятно, было бы безопасно. Злоумышленник не может выбрать местоположение файла или его содержимое; те указаны вашим кодом. Таким образом, ваш метод может использовать привилегированное действие, чтобы позволить его вызывать непривилегированным кодом.