2009-08-14 139 views
0

情況如下:我們有一個公共庫,它可以從我們設置的中央配置存儲檢索數據庫連接詳細信息。每個應用程序在使用數據庫時都使用這個庫。如何驗證應用程序是它說的應用程序?

基本上,它會調用存儲過程並說「我是{xyz}應用程序,我需要連接o」,它將返回該應用程序主數據庫(服務器,實例,數據庫,用戶和密碼)。

如何鎖定下來,以便只有應用程序{xyz}可以檢索{xyz}數據庫的密碼(每個應用程序都有一個數據庫詳細信息列表......我只需要保護密碼) ?

回答

1

關閉我的頭頂,嘗試PKI。

+0

PKI不是一個小問題。你能擴展一些嗎? – 2009-08-14 15:29:14

+0

我在密碼學本身並不是一個新手,但我腦海中有這樣的東西。雖然它有點粗略,但可能會起作用。 這是根據您可以訪問應用程序的源的假設,並自己構建二進制文件 1.生成密鑰對 2.隨身攜帶 3.嵌入公鑰與私鑰每個應用程序實例 4.每當應用程序需要訪問數據庫時,使用時間戳生成簽名字符串。 5.收到請求後,用您的私鑰交叉驗證簽名。 – Everyone 2009-08-14 17:26:50

3

通常的方法是每個應用程序有不同的配置存儲,併爲每個應用程序提供不同的用戶/密碼以連接到配置存儲。

這不會阻止任何人更改應用程序並用應用程序Y的值替換應用程序X的用戶/密碼,但它更安全一些,特別是當您編譯此數據而不是通過配置提供時文件。

如果您想要真正安全,您必須先創建與存儲的安全連接(因此您需要一個支持該連接的數據庫驅動程序)。此連接必須使用安全密鑰創建,該安全密鑰在每個應用程序中都是唯一的,並且可以進行驗證(因此無人可以複製它們)。您需要使用散列保護可執行文件(應用程序將以某種方式計算自己的散列並將其發送給將爲每個應用程序提供有效散列列表的服務器)。

總而言之,這不是一件簡單的事情,你可以用一個不起眼的選項打開。首先,您需要學習很多有關安全和安全數據交換的知識。您需要一種方法來安全地將您的應用安裝在不安全的地方,驗證其完整性,保護代碼免受運行時可附加的調試器的影響,並防止其在虛擬機中運行等。

+0

多個配置存儲不是一個選項。這個系統的全部目的是把所有東西都集中起來,所以我們不必管理400種不同的東西。 – 2009-08-14 11:43:28

+0

那麼,如果你的數據庫中有行級認證,你可以使用它。否則,請將用戶名和密碼保存在配置文件中,並且只返回用戶名和(散列)密碼匹配的行。 – 2009-08-14 13:45:01

+0

請注意,在一般情況下,安全!=舒適。如果你做了一些安全的事情,它很難使用,難以正確設置,等等。 – 2009-08-14 13:46:20

0

一種可能性是以加密形式保存數據庫中的密碼,並將加密密鑰以安全連接的形式傳遞給允許的應用程序。然後,只有具有加密密鑰的應用程序才能真正獲取密碼而不是其他密碼。

+0

小細節:你的意思是「加密形式」和「加密密鑰」。哈希是不可逆的,因此無法將哈希轉換回用於生成哈希的文本。 – 2009-08-14 12:27:22

+0

感謝戴夫的糾正。哈希是單向函數。否則我應該說加密和解密。 – rayimag 2009-08-14 13:30:03

1

您是否試圖保護自己免受惡意軟件攻擊,並且這是這些應用程序連接到的中央數據庫?如果是這樣,你應該考慮一下你的數據庫和應用程序之間的中間層。

我不確定這適用於您的情況,具體取決於您對上述答案的回答是什麼,但通過評論它聽起來像是您的問題與此問題類似。

Securing your Data Layer in a C# Application

0

最簡單/最直接的方法是將存儲在加密格式的密碼(存儲密碼以明文只是普通的壞無論如何,正如最近在PerlMonks證實比),並負責做好每一個應用程序的自己的密碼加密/解密。因此,應用程序是否檢索到另一個應用程序的密碼並不重要,因爲它仍然無法解密它們。