如何可靠地检查工作站上当前用户的 Windows 域 ID

2024-04-08

我正在使用 C# 和 .Net Framework 4。

我正在寻找一种万无一失的方法来获取当前登录的 Windows 用户的登录 ID,该方法不易被假冒或黑客攻击。我正在以以下形式查找此内容:域名\用户名

例如某个域\JohnDoe

目前我拥有的最好的是:

var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
var currentLoginId = identity.Name;

这是否容易被冒充(除了知道用户名和密码的人之外),如果是,是否有更好的方法来做到这一点?


此时至少可以涉及四个不同的身份:

  1. 分配给线程的标识
  2. 分配给进程的标识
  3. 启动该进程的用户的帐户
  4. 登录PC的用户的帐户

在您的代码中,您将得到 (1)。这通常没问题,通常与 (2) 相同。

要检索 (2),您可以:

  1. Call WindowsIdentity.GetCurrent获取冒充身份
  2. 通过调用 Win32 撤消模拟RevertToSelf http://msdn.microsoft.com/en-us/library/aa379317.aspx功能
  3. Look at WindowsIdentity.GetCurrent获取底层进程标识
  4. 通过模拟步骤 (1) 中的身份来重置线程身份

(2) 和 (3) 是相同的,除非您编写了更改进程标识的非托管代码。正如 @Daniel 指出的那样,在存在 Windows“运行方式”命令的情况下,(3) 和 (4) 可能会不同。

Edit:您可以相信当前WindowsIdentity就是它所说的那样,只要您可以信任应用程序中的任何给定数据。

您可以通过将调试器附加到您的进程并伪造此调用的返回值来欺骗它,但如果您打算这样做,您也可以伪造将用户名传递到数据库的代码段。

100% 安全的方法是使用集成身份验证/SSPI 连接到数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何可靠地检查工作站上当前用户的 Windows 域 ID 的相关文章

随机推荐