可以欺骗user.name

时间:2015-01-12 10:18:43

标签: java security environment

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

 System.getProperty("user.name");

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


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


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

2 个答案:

答案 0 :(得分:7)

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

只需使用JVM arg -Duser.name=someothername启动应用即可使System.getProperty("user.name")返回该值。

答案 1 :(得分:0)

对于任何可能再次降落的人来说:

使用cmd-command whoami并使用this post阅读输入应该是一种更安全的方式,使用用户名作为"验证"。

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

相关问题