ConvertTo-SecureString没有-AsPlainText -Force

ConvertTo-SecureString没有-AsPlainText -Force

问题描述:

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)。 –

我不能完全告诉你”再问一遍,但我会为你提出的不同解释给出答案。

“如何在不使用ConvertTo-SecureString的情况下为PSCredential生成密码?”

您可以将常规字符串直接传递给构造函数,并将其转换为内部的SecureString。

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

但是,使用SecureString的值时,最好的做法是从来没有在第一时间以明文的秘密值 - 的原因,你必须与-AsPlainText指定-Force,大概也是为什么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) 
}