2011-09-28 71 views
12

我有以下連接字符串:如何隱藏我的C#連接字符串中的密碼?

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID=sa;Password=password 

(.NET Web服務) 這顯然可以通過打開app.config文件並查看配置設置,簡單地認爲。

我需要的是讓黑客無法看到密碼的方法。但同時,請將其設置爲可定製,以便在部署到另一個數據庫時進行更改。

回答

13

你有多種選擇 - 我所知道的那些(按優先順序排列):

  1. 使用集成(SSPI)安全,你並不需要包括在配置密碼文件
  2. 加密連接字符串(見Encrypting Configuration Information Using Protected Configuration
  3. 存儲的用戶名和密碼分開,並使用字符串格式化來構建完整的連接字符串,

所以對於例如連接字符串可能是這樣的:

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID={0};Password={1} 

我會去的選項1,如果那不可能的,那麼選項2.我已經提到的完整性選項3。

你看過Protecting Connection Information (ADO.NET)嗎?

+0

建議2對於靜態的觀點看起來不錯,但是沒有任何提供的解決方案(由任何人)允許編譯後自定義連接字符串?雖然我猜這是不可能的,因爲這需要他們輸入清晰的文字,這正是避免使用咒語。 P.s你爲什麼要編輯所有內容但不作任何改變? – Doomsknight

+1

@Doomsknight [我剛剛從你的帖子末尾刪除了「謝謝」簽名](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed- from-posts) – Justin

+0

如果你想自定義連接字符串,那麼選項3可能是有用的 - 你可以分別加密密碼(和可選的用戶名)。 – Justin

1

你可以加密的連接字符串 - 然後當你訪問連接字符串,解密。這並不是很好的證明,但是當你遇到存儲解密連接字符串的密鑰的問題時!

6

首先,不要使用「SA」帳戶。如果有人獲得密碼,它將使您的數據庫全面開放。使用只允許在特定數據庫上執行CRUD操作的自定義帳戶。

得到web.config的唯一方法就是破解你的服務器。如果他們這樣做了,無論如何你都被搞砸了。

+2

請激活下來投票,以便我有機會改進我的答案。 – jgauffin

+2

等待,但...這個答案實際上並沒有回答傢伙的問題! (不是我downvoted) – Justin

+2

我沒有downvoted你的答案,但有很多其他的可能性來從網上抓取密碼。配置不僅可以破解服務器,例如某些病毒可以在部署之前從本地開發機器抓取它,或者其他情況。無論如何..問題是如何加密密碼,這是有道理的,因爲有關密碼檢查的主要規則 - ''不要以純文本保存它' – sll

1

I建議/解密連接字符串。因此連接字符串必須手動設置。

對於加密看一看: http://dotnet-snippets.de/dns/encrypt-and-decrypt-strings-SID205.aspx

自定義設置來看看: http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx

更換加密在運行時正確的:

public static void SetAppSettingValue(string Key, string Value) 
    { 

    System.Configuration.Configuration config == ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
// Add an Application Setting. 

config.AppSettings.Settings[Key].Value = Value; 

    // Save the changes in App.config file. 

    config.Save(ConfigurationSaveMode.Modified); 

    ConfigurationManager.RefreshSection("appSettings"); 
    }