【问题标题】:DirectoryEntry safe password handling目录入口安全密码处理
【发布时间】:2018-07-18 02:51:56
【问题描述】:

DirectoryEntry 类要求将用户名和密码作为明文字符串传入。在 c# 中,字符串在用于存储敏感数据时通常是不安全的(使用后无法将内存归零)。如何安全地使用 DirectoryEntry 来查询活动目录,而不会冒着将用户名密码留在内存中的风险?

我确实理解用于存储这些数据的内存在使用后会被释放回堆中,但不会被清除!

如果我的任何断言有误,请告诉我。

https://msdn.microsoft.com/en-us/library/wh2h7eed(v=vs.110).aspx

【问题讨论】:

  • 为什么你的班级需要明文密码?这似乎适得其反。
  • OP 指的是 System.DirectoryServices.DirectoryEntry,它将密码作为明文。
  • 我的课程要求密码永远不要以明文形式存储,除非您可以在使用后清除内存(例如字符或字节数组)。由于 System.DirectoryServices.DirectoryEntry 需要明文凭据,我认为这是一个安全问题。

标签: c# .net security active-directory directoryentry


【解决方案1】:

无法使用不使用纯文本的凭据在 .NET 中查询 LDAP 或 AD。

如果您不想将密码存储在内存中,请不要使用它们,请授予应用程序运行的用户执行您需要的操作的权限,并改为使用 Windows 身份验证。

【讨论】:

    【解决方案2】:

    可能最安全的方法是在访问 AD 所需的凭据下运行应用程序。如果它是一个桌面应用程序,那么这很容易(只需使用适当的凭据作为应用程序运行)。

    在 ASP.NET 中,这有点棘手,但可以通过模拟来完成(对于整个请求,或者只是对于一段代码):https://support.microsoft.com/en-ca/help/306158/how-to-implement-impersonation-in-an-asp-net-application

    【讨论】:

    • 这意味着与Ashigore的回答基本相同。我很想知道为什么 Corey 认为他需要 user+pw。这是在非 AD 帐户下运行,还是作为非域成员在 SYSTEM 下的服务运行?
    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 2015-05-13
    • 2015-11-21
    • 2015-06-19
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    相关资源
    最近更新 更多