我正在編寫一個大學任務的程序,我們需要使用JDBC連接到MySQL數據庫。JDBC本質上不安全?
考慮到數據庫密碼必須以某種形式暴露給程序,爲了它能夠訪問數據庫,當然你最好還是先把密碼交給黑客吧?
我是對的,還是我錯過了什麼?
我正在編寫一個大學任務的程序,我們需要使用JDBC連接到MySQL數據庫。JDBC本質上不安全?
考慮到數據庫密碼必須以某種形式暴露給程序,爲了它能夠訪問數據庫,當然你最好還是先把密碼交給黑客吧?
我是對的,還是我錯過了什麼?
密碼必須暴露給應用程序,這是肯定的,否則應用程序如何連接到數據庫?
但這不是一個很大的安全漏洞。運行應用程序的機器必須不惜一切代價安全。這是主要的事情!如果一個黑客或者一個天真的用戶可以訪問運行應用程序的機器,那麼即使他們沒有足夠的權限,他們也可能會徹底破壞系統。一旦有人可以訪問應用程序的源代碼,並訪問其所運行的計算機,那麼世界上就沒有辦法確保其安全,除非可能擁有非常好的用戶帳戶管理系統。
你可以將密碼外化到一個文本文件並存儲它,甚至可以用鹽,這基本上是我所知道的最好/最常用的方式......但這只是讓有權訪問的人的生活到你的機器稍微難一點...有權訪問源代碼,如果它們很聰明,它們仍然可以進入你的數據庫,或者如果它們不是,它們可以簡單地刪除或損壞它。
因此,JDBC沒有問題......如果您不同意,請說服數百萬的JDBC用戶。安全不是建立在單一技術上的。它涉及保護您的所有系統,並在每個不同節點上添加一層保護層,但要注意,每一層保護都會影響越來越多的可用性和靈活性(這是人們不僅在頂部添加1000層密碼的原因的應用程序/數據庫,它只是不切實際,而且大多數情況下是不必要的,甚至)。
如果您關心JDBC連接的安全性,請對其進行加密。 http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-using-ssl.html
您將支付性能損失,但這是純文本的替代方法。根據MySQL文檔:
啓用SSL的性能損失是查詢處理時間在35%到50%之間的增加,這取決於查詢的大小以及返回的數據量。
此選項可與大多數SQL和NoSQL數據庫。
JDBC是非標準的API,Java應用程序使用連接到一個數據庫系統。它非常成熟,可靠並且在Java社區中廣泛使用。
雖然,某些應用程序在使用不當的API通過暴露 - 適用於源代碼示例 - 數據庫連接憑據。
在How can I protect MySQL username and password from decompiling?有一個很好的解釋這個設計problema和解決它的一些建議:像存儲在應用程序的外部文件的數據庫憑據和採用多層架構。
你是在談論一個網絡應用程序或厚客戶端應用程序?兩者之間的問題非常不同。 –
在給定的情況下,工作人員將使用該程序,但沒有理由黑客或惡作劇的工作人員無法得到它。 (我的意思是從數據庫中的表中驗證用戶身份,但是使用數據庫密碼,所有數據都可以收集,彩虹/生日等)。 – user1277170
對,我意識到由於appplication類型風險不同,所以我改變了我對你上面看到的要求你澄清的評論。 –