2013-05-30 56 views
1

我在尋找一些與存儲和保護數據庫連接字符串相關的建議和最佳實踐建議。 App.config似乎是微軟首選的處理應用程序配置的方式,但我在過去使用它時遇到了一些麻煩 - 或者我只是不理解背後的哲學。保護數據庫連接字符串的安全

對我而言,第一件事顯而易見的事情是:絕對不要以明文存儲連接信息。但是,App.config始終是明文。避免在App.config中存儲人類可讀信息的唯一方法似乎是Protected Configuration。 但是,一個很大的問題是:如果有人部署應用程序,配置將以明文形式部署 - 加密(無需某些工具的幫助)似乎只有在應用程序第一次啓動時纔有可能。

這對我來說似乎並不安全,因爲如果有人在首次運行應用程序之前檢出應用程序目錄(存儲配置的位置),他會以純文本方式收到大量敏感信息。

另請參閱:如何在作爲非特權默認用戶運行的應用程序中保護配置? AFAIK保存應用程序設置需要管理員權限。

微軟真的想過嗎?或者微軟提供了一種不同的方式?

+0

http://msdn.microsoft.com/en-us/library/ff647398.aspx – varun

+0

@varun看起來很有前途,但我不明白如何使用簡單的客戶端Windows應用程序。我需要在安裝過程中爲使用該應用程序的每個用戶加密數據嗎? – Atrotygma

+0

其真正的優點是,你可以保留一個rsa組件的同一個密鑰,它可以解密所有的敏感數據,但是你爲什麼要加密一些敏感的東西,每個clinet都會有所不同,但是必須寫在配置文件中,比如的情況下,你應該讓用戶在UI /管理部分輸入這些東西,並將整個東西保存爲加密文件。如果有任何 – varun

回答

2

您可以輕鬆加密在web.config配置部分,

它看起來像這樣

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> 
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" 
     xmlns="http://www.w3.org/2001/04/xmlenc#"> 
     <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> 
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
     <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> 
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> 
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
      <KeyName>Rsa Key</KeyName> 
      </KeyInfo> 
      <CipherData> 
      <CipherValue>R7cyuRk+SXJoimz7wlOpJr/YLeADGnwJVcmElHbrG/B5dDTE4C9rzSmmTsbJ9Xcl2oDQt1qYma9L7pzQsQQYqLrkajqJ4i6ZQH1cmiot8ja7Vh+yItes7TRU1AoXN9T0mbX5H1Axm0O3X/285/MdXXTUlPkDMAZXmzNVeEJHSCE=</CipherValue> 
      </CipherData> 
     </EncryptedKey> 
     </KeyInfo> 
     <CipherData> 
     <CipherValue>d2++QtjcVwIkJLsye+dNJbCveORxeWiVSJIbcQQqAFofhay1wMci8FFlbQWttiRYFcvxrmVfNSxoZV8GjfPtppiodhOzQZ+0/QIFiU9Cifqh/T/7JyFkFSn13bTKjbYmHObKAzZ+Eg6gCXBxsVErzH9GRphlsz5ru1BytFYxo/lUGRvZfpLHLYWRuFyLXnxNoAGfL1mpQM7M46x5YWRMsNsNEKTo/PU9/Jvnh/lT+GlcgCs2JRpyzSfKE7zSJH+TpIRtd86PwQ5HG3Pd2frYdYw0rmlmlI9D</CipherValue> 
     </CipherData> 
    </EncryptedData> 
    </connectionStrings> 

看看here>你不需要一個工具來未加密,這樣可以輕鬆完成在代碼中,是一種常見的做法。

+1

,也許使用他的登錄憑據來加密它。如前所述,如果我部署應用程序,配置將不會被加密。或者,如果它將綁定到未存儲在目標計算機上的密鑰。所以我假設在安裝應用程序後我必須這樣做,但微軟似乎沒有提供任何工具,我也沒有興趣爲我在WiX上運行它的每個項目編寫自定義操作代碼。 微軟爲開發人員提供完全非常棒的工具來創建應用程序令人失望,但在部署時卻顯得非常糟糕。 – Atrotygma