怎样才能安全地处理密码的定制编写的PowerShell命令?(How does one secure

2019-06-25 17:13发布

假设我有一个自定义的PowerShell命令将数据导出和使用密码加密。

[Cmdlet(VerbsData.Export, "SampleData")]
public class ExportSampleData : PSCmdlet
{
    [Parameter(Mandatory = true)]
    public string Password
    {
        get;
        set;
    }

    /* additional parameters */
}

怎样才能妥善处理密码安全? 例如,我想阻止显示当管理员类型在控制台中的价值。 其他选项包括读取包含加密的密码文件。

我知道PSCredential的,但需要一个用户名,这使得在这种情况下没有任何意义。

Answer 1:

如果你只是想获取密码,你可以用

Read-Host与该cmdlet –asSecureString参数。

此参数屏蔽输入。



Answer 2:

你可以找到这个答案的方式与计算机密码的crypt(关于安全机器的作品)。

使用@Christian响应你可以把密码这样的盘:

PS > $cred.Password | ConvertFrom-SecureString | Set-Content c:\temp\password.txt

并与retreive它:

$password = Get-Content c:\temp\password.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential "UserName",$password


Answer 3:

修改密码参数SecureString的类型; 如果管理员省略-Password参数,PowerShell中会提示管理员的必备参数,以及显示astrisks对方输入正确的事情。

理想的情况是你的cmdlet的实施将通过SecureString的,以本机支持SecureString的(最安全的)一些API; 如果没有,你就必须提取从SecureString的密码。 下面是关于如何做到这一点的好文章: 如何正确地转换SecureString的为String



Answer 4:

如果你正在写一个C#的PowerShell cmdlet和参数的一个要求用户输入应该混淆密码。

要做到这一点,你必须using System.Security;

然后你的参数类型应该是SecureString

因此,使用你的例子:

[Cmdlet(VerbsData.Export, "SampleData")]
public class ExportSampleData : PSCmdlet
{
    [Parameter(Mandatory = true)]
    public SecureString Password
    {
        get;
        set;
    }

/* additional parameters */
}


文章来源: How does one securely handle passwords in a custom written PowerShell cmdlet?