2016-10-04 7 views
3

PSScriptAnalyzer имеет предупреждение PSAvoidUsingConvertToSecureStringWithPlainText. Это означает, что с использованием следующего кода произойдет сбой.ConvertTo-SecureString без -AsPlainText -Force

$password = [System.Web.Security.Membership]::GeneratePassword(128,0) 
$securePassword = ConvertTo-SecureString -String $password -AsPlainText -Force 
$configCredential = New-Object System.Management.Automation.PSCredential ($username,$securePassword) 

Однако существует очень мало (/ нет) руководство о том, как преобразовать обычную строку в защищенную строку без опций -AsPlainText -Force. (Я понимаю, последствия для безопасности регулярных строк)

Как можно достичь выше надежно/без irking PSScriptAnalyzer (я не ищу, чтобы подавить сообщение)

+1

[Родственные] (https://github.com/PowerShell/PSScriptAnalyzer/issues/574). –

ответ

1

Я не могу точно сказать, что вы» спрашиваю, но я дам ответы на разные интерпретации, которые у меня есть для вашего вопроса.

«Как я могу сгенерировать пароль для PSCredential без ConvertTo-SecureString?»

Вы можете передать правильную строку непосредственно в конструктор и преобразовать ее в SecureString внутренне.

$password = [System.Web.Security.Membership]::GeneratePassword(128,0) 
$configCredential = New-Object PSCredential ($username, $password) 

Однако, наилучшая практика при использовании значений SecureString, чтобы никогда не иметь секретное значение в незашифрованном виде, в первую очередь - причина, вы должны указать -Force с -AsPlainText, и, вероятно, также, почему правило PSScriptAnalyzer существует в первой место, является препятствием для этой практики. Если полагаться на безопасности SecureString для смягчения угрозы, вы должны следовать этому нежному принуждению, избегая открытый текст $password переменных:

$configCredential = New-Object PSCredential ($username, [System.Web.Security.Membership]::GeneratePassword(128,0)) 

«Как я могу преобразовать строку в защищенную строку без отключения или подавления ошибок PSScriptAnalyzer ?»

Если вы не заботитесь о самом объекте учетных данных, но хотите SecureString без использования ConvertTo-SecureString, вы все равно можете использовать (ab) класс PSCredential для этой цели. Пример легче читать:

$password = [System.Web.Security.Membership]::GeneratePassword(128,0) 
$configCredential = New-Object PSCredential ($username, $password) 
$securePassword = $configCredential.Password 

Однострочные, который следует лучшие практики:

$securePassword = New-Object PSCredential ($username, [System.Web.Security.Membership]::GeneratePassword(128,0)) | Select-Object -ExpandProperty Password 

Вы также можете разделить строку на символы и приобщать их к SecureString один за другим:

$securePassword = New-Object SecureString 
foreach ($char in [System.Web.Security.Membership]::GeneratePassword(128,0).ToCharArray()) { 
    $securePassword.AppendChar($char) 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^