使用$ host.ui.PromptForCredential时存储的输入值在哪里?

时间:2018-05-24 09:00:33

标签: powershell security

在以下代码中,系统在哪里存储$ Credential的值?

$Credential= $host.ui.PromptForCredential("","Please Enter Your domain username, eg. user1@contoso.com","","")

代码执行后该值会发生什么变化?

原谅最基本的问题......只是想确定我所制作的剧本的安全隐患。我也希望能找到专门解决这个问题的MSDN / TechNet文章。

非常感谢。

1 个答案:

答案 0 :(得分:2)

首先,您应该使用Get-Credential代替它 - 它更容易并完成同样的工作:

$credential = Get-Credential -Message "Please Enter Your domain username, eg. user1@contoso.com"

两种方法都会创建一个PsCredential对象,其引用存储在$credential中。密码以SecureString的形式存储在内存中,以帮助保密,不写入磁盘,注册表等,除非您不要这样做:

PS C:\> $credential

UserName                        Password
--------                        --------
domain\user System.Security.SecureString

因此,偶然尝试阅读是安全的。但是,它并不完全安全:

PS C:\> $credential.GetNetworkCredential() | Format-List *   

UserName       : user
Password       : Password123
SecurePassword : System.Security.SecureString
Domain         : domain