2015-01-12 22 views
6

Để có được tên của người dùng hiện trong một chương trình Java, bạn có thể simply fetch the value of the user.name system property:user.name có thể bị giả mạo

System.getProperty("user.name"); 

Nhưng làm thế nào an toàn là điều đó không? Người dùng có thể thực hiện chương trình dễ dàng đặt thuộc tính này thành giá trị tùy ý hay không (sử dụng đối số dòng lệnh của JVM, ví dụ) cho môi trường thời gian chạy chung? Người dùng có thể dễ dàng giả mạo tên người dùng này không?


Tôi hỏi vì tôi đang viết một chương trình dòng lệnh có thể được điều hành bởi bất cứ ai, nhưng cho phép một số hoạt động đặc quyền chỉ nếu người dùng là một người sử dụng hành chính đặc biệt.

Trả lời

6

Có giá trị này có thể là 'giả mạo' và không thể dựa vào nếu người dùng tự do khởi động ứng dụng.

Chỉ cần khởi động ứng dụng với JVM arg -Duser.name=someothername sẽ gây ra System.getProperty("user.name") để trả về giá trị đó.

0

Đối với bất cứ ai hạ cánh có thể về vấn đề này bao giờ trở lại:

Sử dụng cmd-lệnh whoami và đọc đầu vào sử dụng this post phải là một cách an toàn hơn của việc sử dụng các tên người dùng như "xác nhận".

Ngoại trừ, điều này có thể được giả mạo là tốt, mà có thể khó khăn hơn cho lệnh cmd so với đối số JVM ...

Các vấn đề liên quan