2016-10-04 125 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

我不能完全告訴你」再問一遍,但我會爲你提出的不同解釋給出答案。

「如何在不使用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) 
}