在Windows WPF桌面应用中,我以这种方式使用System.Environment.UserName
:
var q = from l in db.Logins where
l.WinLogin.Trim().Equals(System.Environment.UserName, StringComparison.InvariantCultureIgnoreCase)
&& l.WinDomain.Trim().Equals(System.Environment.UserDomainName, StringComparison.InvariantCultureIgnoreCase)
select l.LoginID;
var login = q.FirstOrDefault();
if (login == null)
/*Access rejected*/
else
/*Access granted*/
我想知道System.Environment.UserName
& System.Environment.UserDomainName
可以在Windows域内轻松伪造(设置为某人的其他帐户)或非管理员用户。
我希望这种认证对于不需要最高安全性的普通Windows应用程序来说是可以的,只是想确保我没有忽略一些明显的东西。
例如,如果我创建与Windows域名相同的家庭工作组,然后在该工作组中创建一个用户,然后使用VPN连接到该Windows域并在家庭工作组计算机上安装该应用程序,我会假装变量和获取访问权限?
答案 0 :(得分:2)
不,System.Environment
变量仅适用于该机器。用户名和域名不能伪造。该调用最终由ADVAPI32
处理,{{1}}是负责内部Windows内容的Windows组件。
您也无法使用VPN或其他方法伪造它。这并不意味着他们无法在应用程序和您要连接的数据库之间进行操作。一定要确保这一点。