假設我正在編寫一個Java應用程序,該程序連接到數據庫以在允許應用程序運行之前對用戶進行身份驗證。我需要存儲數據庫的URL,用戶名,密碼和數據庫名稱。很明顯,任何人都可以反編譯應用程序並查看信息並將其用於我。即使混淆也不行。我如何可以安全地將個人信息硬編碼到Java程序中?Java在分佈式應用程序中安全地存儲個人數據
注意:這是一個假設,所以請不要告訴我任何特定於數據庫信息存儲的東西。
假設我正在編寫一個Java應用程序,該程序連接到數據庫以在允許應用程序運行之前對用戶進行身份驗證。我需要存儲數據庫的URL,用戶名,密碼和數據庫名稱。很明顯,任何人都可以反編譯應用程序並查看信息並將其用於我。即使混淆也不行。我如何可以安全地將個人信息硬編碼到Java程序中?Java在分佈式應用程序中安全地存儲個人數據
注意:這是一個假設,所以請不要告訴我任何特定於數據庫信息存儲的東西。
如何使用公鑰加密登錄數據並將其保存到Java程序A中,並與其他人共享。 A將加密的數據傳輸到程序B(B在專用服務器上保密); B使用您的私鑰解密信息並證明程序A連接到數據庫。
問題在這裏:邪惡的人仍然可以修改A並使用未改變的加密密碼來訪問數據庫。他們可能無法獲得純文本密碼,但他們確實可以訪問。加密的密碼現在大致相當於純文本密碼。 – zapl
你不能。您不可能完全隱藏您提供的信息,因爲您需要使用它並因此找到它。
如果您確實不想授予訪問限制的用戶名和密碼,請不要使用遠程數據庫連接。相反,您可以將用戶輸入的登錄名和密碼發送到服務器應用程序,該應用程序將讀取查詢您的數據庫。
可以隱藏信息嗎?我知道如何存儲這些信息的唯一方法是在「字符串」中,它很容易看到。有沒有辦法加密硬編碼的信息,或至少隱藏它? – nrubin29
不,您不能將這些信息安全地存儲在客戶端,因爲客戶端必須具備解密所需的所有信息。充其量,你可以混淆它,但有一些工具可以輕鬆地逆轉過程。聽這個人的回答。他是對的。 –
我認爲一種好的方法是將應用程序表示和邏輯分開。 應用程序僅顯示使用公共暴露功能(可能是Web服務或API)檢索的數據,或者您遵循Façade_pattern(服務外觀或會話外觀)的任何邏輯。
這可以通過使用例如RMI或EJB輕鬆獲得。在連接到磁盤/電話上的數據庫/ xml的任何邏輯部分,但是這將在外部無法訪問的計算機上完成,如果不是遠程調用的話。
在您的客戶端(可以是Java程序,網站,電話應用程序的演示文稿)和邏輯(位於服務器上)之間可能有防火牆或您想要的任何保護。順便說一下,在服務器端,您可以加密您的EJB(訪問數據庫)中的數據,但不會在外部顯示。
我的意思是這是不知道事情如何實現的很好的一部分,客戶端不知道遠程方法在做什麼,它只需要返回數據,就這些。
我認爲擴大一點這個概念它可能工作,這只是一個粗略的想法。
您需要使用Web服務。永遠不要讓用戶直接訪問數據庫。 – SLaks
就像我說的,這是一個假設。假設我需要將數據存儲在應用程序中,並且不能使用PHP腳本進行身份驗證。 – nrubin29
如果他們想要,一切都可以被黑客入侵。如果這是一個簡單的方法,那麼很多程序都不會出現問題。 –