可以欺骗user.name

问题描述 投票:6回答:2

要获取Java程序中当前用户的名称,可以使用simply fetch the value of the user.name system property

 System.getProperty("user.name");

但那有多安全?对于常见的运行时环境,执行程序的用户是否可以轻松地将此属性设置为任意值(例如,使用JVM的命令行参数)?用户可以轻松欺骗此用户名吗?


我问,因为我正在编写一个可由任何人运行的命令行程序,但只有在用户是特殊管理用户时才允许某些特权操作。


请注意,自Java 11以来,user.name属性仅在程序启动时才被有效读取,因此恶意程序代码无法欺骗它。

java security environment
2个回答
7
投票

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

只需使用JVM arg -Duser.name=someothername启动应用程序将导致System.getProperty("user.name")返回该值。


0
投票

对于任何可能再次登陆的人:

使用cmd命令whoami并使用this post读取输入应该是使用用户名作为“验证”的更安全的方式。

除此之外,这也可能是欺骗性的,对于cmd命令而言可能比对JVM参数更难...

© www.soinside.com 2019 - 2024. All rights reserved.