c# - 防止密码泄露(GetNetworkCredential 方法)

标签 c# powershell powershell-4.0 azure-powershell powershell-remoting

我正在通过 PowerShell 运行空间在 C# 中执行我的 PowerShell 脚本。我们将凭证包装在凭证对象中。但是,当我们编写以下语句时,密码就会暴露。

$Credential = Get-Credential
$Password = $credential.GetNetworkCredential().Password

这里 $Password 将有明文密码,我想防止用户编写任何旨在从凭据对象检索密码的语句

我能想到的一种方式是,在执行脚本之前扫描脚本文本,如果发现这样的语句,我会报告。在 native PowerShell 或任何其他方式中是否有更好的方法来实现这一目标?

最佳答案

使用 Get-Credential cmdlet 捕获 PsCredential 后:

$Credential = Get-Credential

$Credential 变量有两个属性:

  1. 用户名
  2. 密码

Password属性的类型是SecureString:

$Credential.Password.GetType()  --> SecureString

所以它是加密的。现在我们可以使用这两个 cmdlet 将密码传输/保存为普通字符串,而不会泄露实际密码:

  1. ConvertFrom-SecureString
  2. ConvertTo-SecureString

假设我们在 Get-Credential 弹出窗口后向提示提供了 myuser 用户名和 mypassword 密码。

下面会将密码转换为加密的 String 对象:

$Credential.Password | ConverFrom-SecureString

#输出

 01000000d08c9ddf0115d1118c7a00c04fc297eb01000000f9ae07907bbc82458b25fd92b2dae62e0000000002000000000003660000c000000010000000e1d56e48520215b461e09a24c53375660000000004800000a0000000100000008eeb7cf1234bac1806b5b624f4dcef0a18000000c8062d946ab9605dfcaaba9a20d7a7486c54010451c2dd0714000000ce000956b190d080f2c5eae9e159a78916d88e98

您现在可以将此输出保存到一个文件中,稍后使用 Get-Content 读取它,或者将它保存到一个 PowerShell 变量中:

$EncryptedPassword = $Credential.Password | ConverFrom-SecureString

您可以使用 `ConvertTo-SecureString:

将这个普通的 String 转换回 SecureString
$Password = $EncryptedPassword | ConvertTo-SecureString

然后构造新的PsCredential对象:

$CredentialNew = New-Object System.Management.Automation.PsCredential('myuser', $Password)

希望这就是您所追求的。

关于c# - 防止密码泄露(GetNetworkCredential 方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55700896/

相关文章:

c# - 覆盖泛型方法的约束

powershell - 为什么 PowerShell ISE 中的控制台不使用最新安装的 PowerShell 版本?

powershell - 如何扩展(插入)字符串中的数组元素

sql-server-2008 - 通过过渡计算机问题连接到sql server,NT AUTHORITY\ANONYMOUS LOGON登录失败

windows - 如何使用PowerShell为多个子目录创建目录连接?

通过管道传递路径时出现 Powershell 加入路径错误

powershell - PowerShell : "Select-Object <Property>.<SubProperty>"? 中可能存在以下情况吗

c# - 使用空参数调用 Type.MakeGenericType()

c# - 如何指定从 C# 到 C++/CLI 的回调

c# - .NET Core 3.1 控制台应用程序将无法在 Windows 7 上运行