2012-10-06 210 views
1

我發現了一些能夠告訴我導致SQL Compact DB加密的資源,就像在連接字符串中指定密碼一樣簡單。但是,我不喜歡在我的web.config文件中保留該密碼。我知道我可以在運行時動態地爲DbContext提供連接字符串,但即使在那裏,我仍然在連接字符串中包含純文本密碼。我的代碼中哪些密碼容易受到攻擊?如何保護加密的SQL Server Compact數據庫的密碼?

回答

0

你爲什麼害怕在服務器上輸入密碼?大多數系統,例如在一個database.yml文件中的Rails,將它們的連接存儲在某處。

但是你可以做些什麼來保護它是創建一個用於保存連接的encryption.dat文件。在您的web.config文件中,您只需放置連接的「名稱」,然後您需要一個可以加密/解密連接字符串並在運行時將其置於適當位置的類。

,你可以在這裏找到一個樣本項目:http://www.codeproject.com/Articles/14150/Encrypt-and-Decrypt-Data-with-C

但是,這不會給你100%的安全,我懷疑它是值得的。最好確保您的Windows保護程序安全正確,以便沒有人可以在未經許可的情況下訪問它。

+0

我在共享主機上,管理員都可以訪問我的web.config文件。我寧願密碼不要那麼公然可用。我的正常數據庫連接仍然存在,但我的客戶指定他們想要在單獨的加密數據庫中使用信用卡詳細信息,所以我已經開始了額外的工作,並且還可以使其緊密。 – ProfK

1

顯然,如果託管公司有權訪問服務器,則無法獲勝。如果他們真的想要,他們不能阻止他們學習密碼。

所以你只能混淆密碼。我認爲一個好的折衷是硬編碼在這樣的源代碼的密碼:

var plainPassword = Enconding.UTF8.GetString(Convert.FromBase64("encoded-pw-here")) 

這應該保護是簡單的字符串搜索和這樣。我認爲你不能或應該做更多。

+0

我*可以做更多的事情,使用加密的密碼和遠程獲得的解密密鑰,但您在這裏建議的內容似乎相當充分。 – ProfK

+0

解密密鑰仍然需要在服務器上,即使只有一毫秒。託管公司仍然可以攔截它。它可以讀取所有內容。 – usr