2011-12-01 16 views
2

我正在擴展開放源代碼的VoIP軟電話應用程序(用C#/。NET編寫)以滿足我的需求,但不知道如何最好地處理此問題。我想讓應用程序在用戶輸入他的電子郵件地址登錄時連接到數據庫,並執行SQL查詢以使用該電子郵件獲取其帳號並使用帳號進行身份驗證。但是,我認爲包括我的MySQL連接憑據(主機,用戶名,數據庫)是不安全的?我應該怎麼做?在C#應用程序中隱藏MySQL憑證

回答

0

MySQL可以執行基於Windows的身份驗證(即在域中)嗎?如果是這樣,你可以使用它。否則,您可能想要獲得服務的憑據,或使用加密,但您需要包含加密密鑰,以便任何致力於發現它的人都可以。

1

您應該將連接字符串放入配置文件,然後加密該文件的該部分。有一個關於如何在這裏做的教程:Protecting Connection Strings and Other Configuration Information。儘管本教程適用於ASP.NET,但同樣的原則也適用於幾乎任何.NET配置文件。

這裏還有一個類似的問題:Encrypting passwords in WinForms app.config, .NET

+0

當給予應用程序和數據本身的訪問權限時,無論發生什麼情況,總能找到密碼。 –

+0

即使這樣做完成後,一個人仍然可以使用WireShark之​​類的東西在網絡連接上傳輸密碼時嗅探密碼。 – Kibbee

+0

沒問題。這僅適用於ASP應用程序,不適用於桌面應用程序。 –

2

確實不安全。

您需要運行在服務器上的軟件,它可以接受所述電子郵件和密碼作爲輸入並連接到您的數據庫(因此連接字符串位於控件中的機器上),檢查它並返回ACCEPTED或DENIED客戶端。在你的情況下,ACCEPTED可能只是你提到的帳號。

如果電子郵件和密碼是通過加密鏈接(公鑰)從客戶端傳輸到服務器應用程序的,則爲獎勵分數。

0

讓他們在你的裝配結束,您可以編寫您的連接字符串和使用代碼混淆,以保護其免受反彙編

+0

http://woodmann.com/collaborative/tools/index.php/Category:.NET_Deobfuscation_Tools,來自Google的第一個鏈接。 –

0

有很多方法可以做到這一點,包括混淆等方式使其難以使用在應用程序之外,但不是不可能檢索/使用。

你應該怎麼做?最好的方式(據我所知)是給賬戶提供必要的最低限度的憑證,這樣如果有人擁有用戶名和密碼,他/她就不能做任何惡意的事情。權限可以通過多種方式設置用戶特定的數據,例如視圖,以便用戶只能訪問正確的行。基本上,如果安全性是首要問題,則保守地分配權限,並在必要時爲不同的用戶分配不同的憑證。

1

我們在設計數據庫應用程序時的經驗法則是始終使用委派和隔離。

什麼隔離意味着我們通過使用服務(即web服務,wcf,.net remoting等)將數據庫交互與最終用戶應用程序隔離開來。這樣,數據庫永遠不會直接暴露給用戶。

什麼樣的代表意味着數據庫訪問總是由知名的受限訪問數據庫用戶(通常是服務運行的用戶)代表最終用戶執行。如果可能的話,數據庫訪問應由網絡認證的用戶執行,而不是通過在連接字符串或其他半安全位置存儲用戶名和密碼。

最後,一個重要的注意事項:您應始終在通過電線發送之前加密最終用戶的登錄名和密碼信息。這是一項額外的工作,但是從安全角度來看它是值得的。

+0

這很有趣。如果我爲這個應用程序創建一個特殊用戶,使用有限權限並在config中加密它的憑據,會怎樣?這不是最好的解決方案,但即使他們發現它,權限也是有限的。 – tmrhmdv

+0

這應該工作。即使我們使用Windows身份驗證,我們也總是加密連接字符串並將它們存儲在註冊表中。 –

0

您應該在您的服務器上託管一個(php/jsp/asp)腳本,與您的應用程序進行通話。您不應該將代碼存儲在應用程序中,不惜任何代價。

有太多的方法來取出信息。尤其是.NET應用程序它不需要更多的30分鐘:p

+0

如果提供電子郵件地址,它將返回用戶的帳號。但是,不安全,因爲有人可以輸入電子郵件地址並瞭解它的帳號。但這不太可能,所以如果沒有其他好的解決方案,我會這樣做。 – tmrhmdv

+0

由於其電子郵件ID,您可以使用非對稱密鑰加密來加密電子郵件併發送它。通過學習其他人的賬號可以做些什麼? – Pheonix

+0

我假設它是賬戶ID並傳遞給SIP網關...所以有人可以撥打免費電話嗎? :d –