可以欺骗user.name

Rae*_*ald 6 java security environment

要获取Java程序中当前用户的名称,只需获取user.name系统属性的值:

 System.getProperty("user.name");
Run Code Online (Sandbox Code Playgroud)

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


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


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

ext*_*ols 7

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

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