2015-01-12 2 views
6

Чтобы получить имя текущего пользователя в программе Java, вы можете simply fetch the value of the user.name system property:Может user.name подделать

System.getProperty("user.name"); 

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


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

ответ

6

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

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

0

Для тех, кто возможной высадки на это когда-либо снова:

Использование Cmd-команду whoami и читает входные данные, используя this post должна быть более безопасным способом, используя имя пользователя в качестве «проверки».

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

Смежные вопросы