Может ли 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...