Вопрос по c#-4.0, powershell, cmdlets – Как безопасно обрабатывать пароли в специально написанном командлете PowerShell?

2

Предположим, у меня есть собственный командлет PowerShell, который экспортирует данные и шифрует их с помощью пароля.

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

    /* additional parameters */
}

Как правильно обращаться с паролями безопасно? Например, я бы хотел, чтобы значение не отображалось, когда администратор вводит его в консоль. Другие варианты включают чтение файла, который содержит зашифрованный пароль.

Мне известно о PSCredential, но для этого требуется имя пользователя, которое не имеет смысла в этом сценарии.

Отмеченный ответ. bloudraak
как ты в итоге использовал это? У меня похожая проблема. Nitin Chaudhari

Ваш Ответ

4   ответа
1

Измените тип параметра Password на SecureString; если администратор пропускает параметр -Password, PowerShell поступит правильно, предложив администратору ввести обязательный параметр и отобразив при этом звездочку.

В идеале реализация вашего командлета передаст SecureString некоторому API, который изначально поддерживает SecureString (наиболее безопасный); если нет, вам придется извлечь пароль из SecureString. Вот хорошая статья о том, как это сделать:Как правильно конвертировать SecureString в String

3

Если вы хотите получить только пароль, вы можете использовать

Read-Host командлет с–asSecureString параметр.

Этот параметр маскирует ввод.

1

Если вы пишете командлет C # PowerShell и один из параметров требует от пользователя ввода пароля, его следует запутать.

Для этого нужно бытьusing System.Security;

И тогда ваш тип параметра должен бытьSecureString.

Итак, используя ваш пример:

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

/* additional parameters */
}
1

Вы можете найти вэтот ответ способ шифрования с паролем компьютера (работает на безопасных машинах).

Используя ответ @Christian, вы можете поместить пароль на диск следующим образом:

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

И получить это с:

$password = Get-Content c:\temp\password.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential "UserName",$password
Это довольно полезно, когда у меня есть пароль. bloudraak

Похожие вопросы