Может ли user.name быть подделанным

Чтобы получить имя текущего пользователя в программе Java, вы можете просто получить значение системного свойства user.name:

 System.getProperty("user.name");

Но насколько это безопасно? Может ли пользователь, выполняющий программу, легко установить это свойство на произвольное значение (например, с использованием аргумента командной строки JVM) для обычных сред выполнения? Может ли пользователь легко обмануть это имя пользователя?


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

Ответ 1

Да, это значение может быть "подделано" и не может быть использовано, если пользователь может запустить приложение.

Просто запуск приложения с помощью JVM arg -Duser.name=someothername приведет к тому, что System.getProperty("user.name") вернет это значение.

Ответ 2

Для всех, кто может снова приземлиться на это:

Использование cmd-команды whoami и чтение ввода с использованием этого сообщения должно быть более безопасным способом использования имени пользователя в качестве "проверки".

Кроме того, это также может быть подделано, что может быть сложнее для команды cmd, чем для аргумента JVM...