user.name 可以被欺骗吗
Can user.name be spoofed
要在 Java 程序中获取当前用户的名称,您可以 simply fetch the value of the user.name
system property:
System.getProperty("user.name");
但这有多安全?对于常见的 运行time 环境,执行该程序的用户能否轻松地将此 属性 设置为任意值(例如,使用 JVM 的命令行参数)?用户可以轻易伪造此用户名吗?
我问是因为我正在编写一个命令行程序,任何人都可以 运行,但只有当用户是特殊管理用户时才允许某些特权操作。
请注意,由于 Java11 user.name
属性 仅在程序启动后有效读取,因此恶意 程序代码 无法恶搞一下。
是的,这个值可以是 'spoofed',如果用户可以自由启动应用程序,则不能依赖此值。
简单地使用 JVM arg -Duser.name=someothername
启动应用程序将导致 System.getProperty("user.name")
到 return 该值。
对于任何可能再次登陆这里的人:
使用 cmd 命令 whoami
并使用 读取输入应该是使用用户名 "validation".
的更安全的方式
除此之外,这也可以被欺骗,这对于 cmd 命令来说可能比 JVM 参数更难...
要在 Java 程序中获取当前用户的名称,您可以 simply fetch the value of the user.name
system property:
System.getProperty("user.name");
但这有多安全?对于常见的 运行time 环境,执行该程序的用户能否轻松地将此 属性 设置为任意值(例如,使用 JVM 的命令行参数)?用户可以轻易伪造此用户名吗?
我问是因为我正在编写一个命令行程序,任何人都可以 运行,但只有当用户是特殊管理用户时才允许某些特权操作。
请注意,由于 Java11 user.name
属性 仅在程序启动后有效读取,因此恶意 程序代码 无法恶搞一下。
是的,这个值可以是 'spoofed',如果用户可以自由启动应用程序,则不能依赖此值。
简单地使用 JVM arg -Duser.name=someothername
启动应用程序将导致 System.getProperty("user.name")
到 return 该值。
对于任何可能再次登陆这里的人:
使用 cmd 命令 whoami
并使用
除此之外,这也可以被欺骗,这对于 cmd 命令来说可能比 JVM 参数更难...