C# System.Environment.UserName是否容易伪造?
在windows WPF桌面应用程序中,我以以下方式使用C# System.Environment.UserName是否容易伪造?,c#,wpf,authentication,windowsdomainaccount,C#,Wpf,Authentication,Windowsdomainaccount,在windows WPF桌面应用程序中,我以以下方式使用System.Environment.UserName: var q = from l in db.Logins where l.WinLogin.Trim().Equals(System.Environment.UserName, StringComparison.InvariantCultureIgnoreCase) &&
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域并在家庭工作组计算机上安装应用程序,我是否会伪造这些变量并获得访问权限?否,
System.Environment
变量仅适用于该机器。用户名和域名不能伪造。调用最终由ADVAPI32
处理,它是负责内部Windows内容的Windows组件
你也不能用VPN或其他方法来伪造它。这并不意味着他们无法进入应用程序和你连接的数据库之间。也要确保安全。谢谢,我会在家里测试。问题是,当我在家运行应用程序时,它会根据本地用户和计算机名进行身份验证,而不是根据用于登录到域的VPN域帐户进行身份验证。如果您在家中的PC上运行,则是。它获取的是家庭电脑信息,而不是你所连接的域的信息。检查了它,不能伪造它,主要是因为域名包含一个点字符,这在windows计算机名中是禁止的,所以对我来说这就足够了。伪造者是谁?由用户提供?当然,他可以修改你的代码或.NET Framework代码。@usr但是如果没有plb文件,这将是一项非常困难和艰巨的工作,对吗?编辑.NET二进制文件非常容易。例如,反编译、编辑和重新编译。如果你的用户不能做到这一点,那么我想这可能足够好了。。。但这不是真正的安全性。根据这个线程,它不应该这么简单。