Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java user.name可以被欺骗吗_Java_Security_Environment - Fatal编程技术网

Java user.name可以被欺骗吗

Java user.name可以被欺骗吗,java,security,environment,Java,Security,Environment,要获取Java程序中当前用户的名称,您可以: 但这有多安全?对于常见的运行时环境,执行程序的用户能否轻松地将该属性设置为任意值(例如,使用JVM的命令行参数)?用户能否轻松伪造此用户名 我之所以问这个问题,是因为我正在编写一个命令行程序,它可以由任何人运行,但仅当用户是一个特殊的管理用户时,才允许某些特权操作 请注意,由于Java 11的user.name属性仅在程序启动时有效读取,因此恶意程序代码不能欺骗它。是的,如果用户可以自由启动应用程序,则此值可以被“欺骗”,并且不可依赖 只要用JV

要获取Java程序中当前用户的名称,您可以:

但这有多安全?对于常见的运行时环境,执行程序的用户能否轻松地将该属性设置为任意值(例如,使用JVM的命令行参数)?用户能否轻松伪造此用户名


我之所以问这个问题,是因为我正在编写一个命令行程序,它可以由任何人运行,但仅当用户是一个特殊的管理用户时,才允许某些特权操作



请注意,由于Java 11的
user.name
属性仅在程序启动时有效读取,因此恶意程序代码不能欺骗它。

是的,如果用户可以自由启动应用程序,则此值可以被“欺骗”,并且不可依赖


只要用JVM arg
-Duser.name=someothername启动应用程序,就会导致
System.getProperty(“user.name”)
返回该值。

对于任何可能再次登陆该应用程序的用户:

使用cmd命令
whoami
并使用读取输入应该是将用户名用作“验证”的更安全的方法


除此之外,这也可能是伪造的,这对于cmd命令来说可能比JVM参数更难…

值得一提的是,这里有一种(稍微)更安全的方法来获取Java中的用户名(snippet/gist):
 System.getProperty("user.name");