【问题标题】:How to mask user input password in parameter of C# custom Cmdlet如何在 C# 自定义 Cmdlet 的参数中屏蔽用户输入密码
【发布时间】:2014-01-31 02:09:06
【问题描述】:

在我的程序中,我需要在参数中询问用户密码:

[Cmdlet(VerbsCommon.Get, "MyTest"]
public class GetMyTest : PSCmdlet
{
    [Parameter(Mandatory=true)]
    public ? Password { get; set;}
}

我不知道密码的正确类型是什么。在另一个问题中: How does one securely handle passwords in a custom written PowerShell cmdlet?

接受的答案要求在代码中使用 read-host,但我必须使用参数来询问此字段。

我也尝试使用 SecureString 作为密码,但我无法为该参数提供 SecureString,因为它将被自动接受为字符串,而不是安全字符串。

有什么办法可以实现如下用法:

Get-MyTest -Password ***** (where I actually type in 'abcde' but the input is masked.)

【问题讨论】:

    标签: c# powershell powershell-cmdlet


    【解决方案1】:

    无法用星号保护命令行输入的特定部分 - 命令行输入只是纯文本。

    选项

    • 将密码存储在文件中,使其在输入中不可见。现在的问题是如何保护该文件,但可能适用于某些情况 - 即指定类似于 web.config 中的加密设置的加密密码
    • 要求用户输入密码
    • 密码要求用户使用该帐户登录(用于 Windows 身份验证)
    • 如果有某种方法可以获得短期令牌(即使用 OAUTH) - 您可以以明文形式使用它而不是密码

    【讨论】:

      【解决方案2】:

      通常所做的是将密码存储在字符串类型的变量中,然后以某种方式(SHA256、MD5 等)对其进行哈希处理以将其存储在数据库中(或进行比较并允许或不允许用户访问应用程序。

      所以,我不确定是否有更好的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 2019-11-03
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        相关资源
        最近更新 更多