2017-04-12 52 views
1

我有一個連接到數據庫的連接字符串和通用用戶C#SQL連接字符串的最佳實踐

"Database=DBADAS;Server=TMT123\\SQLEXPRESS;User ID=user; Password=*****; 

連接到一個登錄對話框中的數據庫後WinForms應用程序,我們檢查,如果用戶和密碼在數據庫中存在於用戶表中。

我的問題是現在如果這是一個很好的做法?因爲基本上在連接字符串中有破解服務器所需的全部信息。

回答

1

有幾種方法去這個安全。由於它是一個Winforms應用程序,而不是一個Web應用程序,因此大多數安全風險都會讓您的網絡中已有人訪問連接字符串。這本身就增加了一層安全性。

1.硬編碼 您可以硬編碼連接字符串,將用戶提取到一個DLL中,並使您的應用程序依賴於該DLL。我只是建議這樣做,因爲它聽起來像「通用用戶」密碼是永久的;否則,每次更改密碼時都必須重新編譯代碼,然後重新部署。但是,這是非常安全的,因爲該值不是以純文本形式存儲的。

2. App.Config 您可以將其粘貼在配置文件中。在安全網絡中,這可能是最通用的選項,因爲您可以存儲多個字符串並輕鬆更新它們而無需更新完整的應用程序。這很適合像「DebugMode」設置等設置。使用App.Config或其他XML文件非常理想,但您也可以滾動快速且骯髒的.txt文件。

3.數據庫 可能是所有的最安全的方式,因爲你可以加密你的數據庫,並編寫你的程序來獲取其連接字符串,並通過使用一個不相關的登錄登錄該數據庫的信息。這樣可以更好地控制應用程序在用戶尚未登錄時可以達到的功能。它還可以防止軟件在網絡之外運行,這可能是需要的。

4.內部API 擁有一個單獨的應用程序服務於這個數據休妻用戶的能力從你的關注,因爲API和您的應用程序可以交換驗證關鍵字,看看您的應用程序甚至有權嘗試連接。這是我個人最喜歡的,但顯然是設置最多的工作。

5.註冊表項 根據安裝方式的不同,在註冊表中嵌入需要的標記可能會奏效。這可以確保應用程序需要管理員權限才能安裝,並允許您使用Windows安全性來限制對配置單元的訪問。

再一次,因爲它是一個內部的非網頁應用程序,所以我不會過多擔心連接字符串的純文本;如果有人將你的網絡擴展到了很遠的地方,那麼你很可能會遇到更大的問題。我不會將它作爲純文本文件保留在本地目錄中,但是以上任何程度的安全性都可能適用於您的目的。

+0

這是一個很好的答案。謝謝! – berthos

2

加密Web.Config中

  1. 打開命令提示符具有管理員權限
  2. 在CommandPrompt,請輸入:

    cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 
    
  3. 如果您的網絡配置位於「d :\ Articles \ EncryptWebConfig「目錄路徑,然後輸入以下內容以加密ConnectionString:

    ASPNET_REGIIS -pef "connectionStrings" "D:\Articles\EncryptWebConfig" 
    

使用工具的Aspnet_regiis.exe與-pef選項和如上所示指定該應用程序的路徑。

說明:參數「connectionStrings」區分大小寫。

對於的WinForms:您需要重命名你的app.config到web.config中使用步驟1至3進行加密,然後重新命名它的app.config。

參考:https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config

+0

標籤引用Winforms,所以這可能不是一個Web應用程序。 – CDove

+0

您仍然可以使用此方法,您只需將app.config重命名爲web.config,然後使用upper方法對其進行加密,然後將web.config重命名爲app.config。 –