【问题标题】:Process with Verb = "runas" does not start with the credentials defined in ArgumentsVerb = "runas" 的进程不以参数中定义的凭据开始
【发布时间】:2017-03-10 04:59:02
【问题描述】:


这个

var psi = new ProcessStartInfo("cmd")
            {
                Verb = "runas",
                UseShellExecute = true,
                Arguments = "/user:domain\\username"
            };
        var ps = Process.Start(psi);

不使用给定的凭据启动命令行窗口,也不要求输入密码。我想知道如何正确使用它。

有人告诉我,不应该使用 StartInfo.UserName、Domain 和 Password 方法,因为它不安全。

【问题讨论】:

  • 它到底有什么不安全的地方?
  • "请不要在源代码中保存密码!"所以我被告知了。
  • 无需保存,您可以自己提示用户并在实际启动之前将其传递给您的ProcessStartInfo ;)
  • 问题根本不在于使用它们,而在于将秘密嵌入到您的脚本中。有许多安全技术可以将凭据、密钥和其他机密信息放入脚本中,而无需将值存储在脚本本身中。

标签: c# process.start runas


【解决方案1】:

我不会说使用这种内置的 .NET 功能是不安全的:只要不保存明文密码,就可以了。只需按照 .NET 的要求向您的 ProcessStartInfo 提供所有非关键属性,然后提示用户输入密码:

var psi = new ProcessStartInfo("cmd")
{
    UseShellExecute = true,
    UserName = "username",
    Domain = "domain"
};

SecureString password = new SecureString();

Console.WriteLine("Please type in the password for 'username':");
var readLine = Console.ReadLine(); // this should be masked in some way.. ;)

if (readLine != null)
{
    foreach (var character in readLine)
    {
        password.AppendChar(character);
    }

    psi.Password = password;
}

var ps = Process.Start(psi);

但是,正如我的评论所述,您应该以某种方式屏蔽密码提示。请参阅Password masking console application 以获取有关如何实现此目的的示例...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多