2009-06-16 86 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,然後讓子進程繼承該句柄 - 不必擔心加密。

相關問題