我应该在.NET中的Process.Start调用中传递敏感数据吗?

4
我正在开发一个.NET Windows应用程序,将使用Process.Start启动在同一台计算机上运行的另一个内部开发的.NET应用程序。我需要传递数据库连接信息,包括用户ID和密码,到目标应用程序。我想确定是否需要在发送之前加密这些信息。
假设最终用户的计算机没有被攻击,如果我在参数中传递未加密的连接信息,那么这些信息会暴露在任何地方吗?
类似这样的东西是否可行...
string myExecutable = "myApp.exe";
string server = "myServer";
string database = "top_secret_data";
string userID = "myUser";
string password = "ABC123";
string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password);
ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo);
Process.Start(startInfo);

或者我应该使用类似这样的东西...
var crypto = new MySymmetricCryptoLib.Crypto();
string myExecutable = "myApp.exe";
string server = crypto.Encrypt("myServer");
string database = crypto.Encrypt("top_secret_data");
string userID = crypto.Encrypt("myUser");
string password = crypto.Encrypt("ABC123");
string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password);
ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo);
Process.Start(startInfo);
5个回答

4

获取一个进程所调用的参数非常容易,因此这些参数将被本地技术用户使用。如果这对你不是问题,那么我就不必担心了,因为你说你没有通过网络传输,并且你的问题要求我们假设机器没有被攻击。


2

从您的问题中并不清楚您要保护数据免受哪些方面的侵犯。这一点令人困惑,因为您说“假设PC没有受到破坏”。

如果您在计算机上启动本地进程且该计算机未受到破坏,则有什么需要保护的呢?在这种情况下,没有任何内容会在网络上传输,因此没有人可以窥视参数。

然而,如果您担心可能拥有计算机管理员访问权限或用户有可能看到数据,则必须加密数据。很容易查看进程的命令行参数。任何半能干的用户都可以找到它们。


好的观点。澄清一下,我并没有特定的“来自谁”的想法。我只是想评估传输这些数据未加密的一般风险,并了解在什么样的情况下数据可能会被暴露。 - John M Gant

1

我会对整个字符串进行加密而不是单独的部分,因为你基本上告诉了一个捣蛋的用户:嘿,这里是连接信息,去破解吧。另一个选项是在其他应用程序启动后传递参数。

在构建安全措施时,重要的是要确定攻击是什么(获取数据库连接信息),以及谁将发起攻击。您是要防止本地用户获取此信息吗?您是要防止普通用户还是专业用户?

例如,专家可以转储进程的内存,并找到未加密的字符串。


1
使用命名管道并适当设置ACL,然后让子进程继承句柄 - 不必担心加密。

0

既然您需要修改接收应用程序来进行解密,为什么不修改接收应用程序以从配置文件中读取,然后加密配置文件呢?如果您需要传递不同的值到其他应用程序,为什么不传递一个 connectionString 键呢?


好问题。我没有在问题中指定这一点,但连接信息非常不确定。这取决于用户和环境。 - John M Gant
你能否将这个逻辑封装在第二个应用程序中? - RichardOD
那通常是个好主意,但由于我无法在此解释的原因,在这种情况下不是可选项。 - John M Gant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接