Java user.name可以被欺骗吗
要获取Java程序中当前用户的名称,您可以: 但这有多安全?对于常见的运行时环境,执行程序的用户能否轻松地将该属性设置为任意值(例如,使用JVM的命令行参数)?用户能否轻松伪造此用户名Java user.name可以被欺骗吗,java,security,environment,Java,Security,Environment,要获取Java程序中当前用户的名称,您可以: 但这有多安全?对于常见的运行时环境,执行程序的用户能否轻松地将该属性设置为任意值(例如,使用JVM的命令行参数)?用户能否轻松伪造此用户名 我之所以问这个问题,是因为我正在编写一个命令行程序,它可以由任何人运行,但仅当用户是一个特殊的管理用户时,才允许某些特权操作 请注意,由于Java 11的user.name属性仅在程序启动时有效读取,因此恶意程序代码不能欺骗它。是的,如果用户可以自由启动应用程序,则此值可以被“欺骗”,并且不可依赖 只要用JV
我之所以问这个问题,是因为我正在编写一个命令行程序,它可以由任何人运行,但仅当用户是一个特殊的管理用户时,才允许某些特权操作
请注意,由于Java 11的
user.name
属性仅在程序启动时有效读取,因此恶意程序代码不能欺骗它。是的,如果用户可以自由启动应用程序,则此值可以被“欺骗”,并且不可依赖
只要用JVM arg
-Duser.name=someothername启动应用程序,就会导致System.getProperty(“user.name”)
返回该值。对于任何可能再次登陆该应用程序的用户:
使用cmd命令whoami
并使用读取输入应该是将用户名用作“验证”的更安全的方法
除此之外,这也可能是伪造的,这对于cmd命令来说可能比JVM参数更难…值得一提的是,这里有一种(稍微)更安全的方法来获取Java中的用户名(snippet/gist):
System.getProperty("user.name");