2009-06-16 84 views
4

我正在研究.NET Windows应用程序,该应用程序将使用Process.Start启动在同一台PC上运行的另一个内部开发的.NET应用程序。我需要将数据库连接信息(包括用户标识和密码)传递给目标应用程序。我试图确定在发送之前是否需要加密信息。我应该将敏感数据传递给.NET中的Process.Start调用吗?

假设最终用户的PC没有受到威胁,如果我在参数中传递未加密的连接信息,连接信息是否会暴露在任何地方?

将这样的事情是OK ...

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); 

回答

4

检索参数,一个过程调用是很容易的,所以他们会在本地暴露给技术敏感的用户。如果这对你来说不是问题,那么我不会担心它,因为你说你没有通过网络传输,并且你的问题要求我们假设机器没有受到损害。

2

从你试图保护数据的问题来看,并不清楚。这很让人困惑,因为你说“假设个人电脑没有受到损害”。

如果您在机器上启动本地进程并且机器未受到危害,那么有什么可以保护的?在这种情况下,没有什么会穿过网络,所以没有人可以窥探论证。

但是,如果您担心任何人可能拥有对计算机的管理访问权限或可能看到数据的用户,那么您必须对其进行加密。查看进程的命令行参数很容易。任何半胜任的用户都可以找到他们。

+0

好点。为了澄清,我没有具体的“从谁”。我只是想估计未加密数据传递的一般风险,并且看看数据可能暴露在什么类型的情况下。 – 2009-06-16 14:31:14

0

由于您不得不修改接收应用程序以进行解密,为什么不修改接收应用程序以从配置文件读取,然后encrypt the config file。如果你需要传递不同的值给另一个应用程序,为什么不传递一个connectionString键?

+0

好问题。我没有在问题中说明这一点,但连接信息非常多变。这取决于用户和环境。 – 2009-06-16 14:28:47

1

我会加密整个字符串,而不是单个的部分,你基本上告诉了一个错误的用户嘿,这里的连接信息只是继续前进,并打破它。另一种选择是在其他应用程序启动后传递参数。

当您的建筑安全措施确定攻击是什么(获取数据库的连接信息)以及谁将发起攻击时,这很重要。你是否试图阻止本地用户得到这个?您是否试图阻止普通用户或专家用户?

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

1

使用一个命名管道并在其上适当地设置ACL,然后让子进程继承该句柄 - 不必担心加密。

相关问题