我不确定这个问题是否更适合Stackoverflow或SuperUser或StackExchange网站...
基本上我是从C#启动第三方应用程序,Process.Start
有几个命令行参数。其中一个命令行参数是密码。
我认为我在应用程序的任何地方保护密码都做得非常好,除非您在任务管理器中打开“进程”选项卡,您可以添加“命令行”列并查看所有这些命令行参数
任何人都可以想到一种方法来启动一个以某种方式隐藏命令行参数的进程吗?这有可能吗?
谢谢!
编辑:
这是plink.exe(SSH / Putty东西)的Windows服务包装器。如果我没有在命令行中指定密码,它会提示输入密码,但是我收到了这个奇怪的警告:
Plink.exe - 3/30/2013 2:40:47 PM - Attempting keyboard-interactive authentication
Plink.exe - 3/30/2013 2:40:47 PM - Server refused keyboard-interactive authentication
Plink.exe - 3/30/2013 2:40:49 PM - user@hostname.com's password:
我已指定重定向标准输入,但也许我会继续查看,看看我是否可以解决它。此外,正如David Heffernan所建议的那样,我将进一步研究Pageant。谢谢大家 - 一旦找到更好的解决方案,我会发布更新!
答案 0 :(得分:3)
没有办法将命令行参数传递给进程,以便进程可以看到它,但系统中的其他所有参数都不能。
这是一个明显的缺陷,当程序允许密码作为参数传递时,通常是为了方便那些不关心窃听者的用户。精心设计的程序通常还会提供其他安全的身份验证方法。
答案 1 :(得分:1)
如果为新进程设置ACL,则应限制谁可以读取命令行信息。一个空ACL,不授予权限,可能阻止使用任务管理器访问管理员,尽管我的第一个猜测是它不会。 (请注意,空安全描述符不与空ACL相同。一个隐式授予每个人权限,另一个隐含地拒绝它。)
当然,管理员总是可以将plink.exe
替换为存储密码的地方。所以我不确定担心管理员可以通过任务管理器看到什么是有道理的!