簡體   English   中英

顯示用於連接到服務器的用戶名和密碼的代碼

[英]Code showing username and password for connecting to server

我正在編寫一種方法,使我的 Java 程序可以創建一個數據庫連接,最終使我能夠從其他類/方法訪問它。

public class DatabaseConnection
{
    
    private Connection databaseLink;
    
    public Connection getConnection()
    {
        String url = "jdbc:mysql://localhost/DBname";
        
        try
        {
            Class.forName("com.mysql.cj.jdbc.Driver");
            databaseLink = DriverManager.getConnection(url, "fakeUsr", "fakePsw");  //these are not the real username/password
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        
        return databaseLink;
    }
}

我有幾個問題:1)自從我寫了“localhost”后,不使用我的電腦的人將無法進入我的服務器:

String url = "jdbc:mysql://localhost/DBname";

2) 我輸入了真實的用戶名和密碼,而不是“fakeUsr”和“fakePsw”。 問題是:我很確定我的程序的普通用戶不應該能夠訪問該信息。 有沒有其他方法允許訪問數據庫而不讓幾乎任何訪問我的源代碼的人都可以讀取用戶名和密碼?

對於問題 n。 1:我試着在這里輸入我的 IP 地址而不是“localhost”: String url = "jdbc:mysql://localhost/DBname"; //changed localhost to my IP address String url = "jdbc:mysql://localhost/DBname"; //changed localhost to my IP address

但后來我得到“通信鏈接失敗”。

對於問題 n。 2:我真的不知道如何解決這個問題。 我從來沒有編寫過需要訪問數據庫的程序,所以我不得不為此即興創作。

關於問題 #2:

沒有安全的方法將密碼存儲在代碼本身中。 您當然可以嘗試加密密碼,但是您的代碼必須在建立連接時對其進行解密,因此加密密鑰幾乎“對所有有權訪問您的源代碼的人”都是可見的。 有了這個密鑰,就可以得到真正的密碼,只是稍微復雜一點。

唯一安全的方法是讓用戶自己輸入登錄憑據 低級別(啟動應用程序時程序 arguments)或某種形式的“登錄對話框”,如果應用程序有 GUI。

第三種選擇是創建一個具有受限數據庫訪問權限的技術用戶,具體取決於您正在處理的應用程序。 但這通常會導致安全問題。

您可以創建您的應用程序,使其發送 https 請求並針對網絡服務器進行身份驗證。 您使用什么來進行身份驗證取決於您:客戶端 IP、用戶名、密碼、客戶端證書……

一旦通過身份驗證,您的網絡服務器可以傳輸客戶端用於登錄到您的數據庫的一次性用戶名/密碼。

這里的優點是您仍然可以控制用戶是獲得完全訪問權限還是受限訪問權限,或者出於任何原因不再獲得密碼。 而且您的應用程序中沒有安全漏洞。

1) 大多數 Inte.net 提供商不允許普通用戶接受傳入的套接字連接,這既是出於安全原因,也是因為.network 流量會很快淹沒消費級.networks。 您將不得不購買允許傳入連接的商業互聯網連接,或者尋找可以租賃或借用的服務器。 恐怕我不知道有哪些選擇。

2) 正如 MrFreeze 正確指出的那樣,沒有辦法在應用程序中安全地嵌入憑據。 無論您做什么來隱藏您的數據庫登錄憑據,總有人可以反編譯您的程序並弄清楚您是如何解密這些憑據的。 唯一真正安全的解決方案是告訴用戶您信任憑據是什么,然后編寫您的應用程序以便用戶必須輸入它們。

旁注: Class.forName("com.mysql.cj.jdbc.Driver"); 多年來一直不需要。 您可以刪除該行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM