我不知道这个问题是更适合的Stackoverflow或超级用户或什么StackExchange网站…
基本上我从C#启动了第三方应用程序与Process.Start
与几个命令行参数。 其中一个命令行参数是密码。
我认为我在我的应用程序的每个地方都确保密码的安全性,除非在任务pipe理器中打开“进程”选项卡,否则可以添加“命令行”列并查看所有这些命令行参数。
任何人都可以想到一种方式来启动一个进程,以某种方式隐藏命令行参数? 这可能吗?
谢谢!
编辑:
这是一个Windows服务包装plink.exe(SSH /腻子的东西)。 如果我没有在命令行中指定密码,它会提示input密码,但我得到这个奇怪的警告:
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:
我已经指定redirect标准input,但也许我会继续寻找,看看我是否可以解决它。 另外,正如大卫·赫弗南(David Heffernan)所build议的那样,我将进一步研究“选美”。 谢谢大家 – 一旦找出更好的解决scheme,我会发布更新!
没有办法将命令行参数传递给进程,以便进程可以看到它,但是系统中的其他所有内容都不能。
这是一个明显的缺陷,当程序允许密码作为参数传递时,通常是为了方便用户而不是窃听者。 精心设计的程序通常还会提供其他安全的身份验证方法。
如果为新进程设置ACL,则应该限制谁可以读取命令行信息。 一个空的ACL,没有授予权限, 可能会阻止使用任务管理器的管理员访问,虽然我的第一个猜测是,它不会。 (请注意,一个空的安全描述符与空的ACL不同,一个隐式授予所有人权限,另一个默认拒绝。)
当然,管理员可以随时将plink.exe
替换为存储密码的地方。 所以我不确定担心管理员可以看到与任务管理器是合理的!