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(我不看消息打压)
答
我不能完全告诉你”再问一遍,但我会为你提出的不同解释给出答案。
“如何在不使用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)
}
[相关](https://github.com/PowerShell/PSScriptAnalyzer/issues/574)。 –