2013-10-23 29 views
2

我正在創建一個Java桌面應用程序,用於在數據庫上生成用戶密碼並將其存儲。如何在Java桌面應用程序中安全地實現SQL查詢

我的問題是:什麼是在應用程序中實現SQL查詢最安全的方法?

當然,在源代碼中查詢並不安全。我的工作將是在本地存儲數據庫文件,但我更願意將數據存儲在外部服務器上。

那麼如何在swing應用程序中實現SQL查詢而不需要嵌入源代碼。

+2

讓swing應用程序與服務器交談(使用RMI,Web服務或其他),並在服務器代碼中執行SQL查詢。 –

+0

如果您可以選擇移動數據,爲什麼沒有Web服務在服務器端爲您維護它?訪問數據庫比訪問SQL查詢更爲關心。 –

回答

0

沒有必要保護查詢文本。您可能有關於記錄查詢使用的參數的問題。如果您將原始密碼存儲在數據庫中,這是一個問題。所以我建議首先不要存儲raw passwords

我會詳細介紹一下將SQL嵌入Java代碼。如果你的應用程序與數據庫一起工作,你需要調用數據庫,這意味着執行SQL語句。避免這種情況的唯一方法是將此工作委託給另一個應用程序,以便您的應用程序不使用SQL,而使用一些自定義協議/ API,並且該應用程序將代表它執行SQL查詢。

您可能需要將SQL與Java代碼分開存儲,但這不是出於安全考慮,而是主要因爲需要更適當地構造應用程序。這是不將SQL嵌入到Java代碼中的主要驅動力是代碼可讀性,性能,維護和代碼重用。

訪問數據庫時使用ORM是一種常見的做法。在這種情況下,您的應用程序根本不具有SQL代碼,而是通過ORM API訪問數據庫。在休眠例如查詢可能看起來像

User user = session.createCriteria(User.class) 
    .add(Restrictions.eq("name", userName)) 
    .uniqueResult(); 

而且,即使你需要執行不直接通過您所選擇的ORM支持的一些SQL查詢的SQL文本本身通常存儲在有的伴有xml文件。

請注意,在後一種情況下,儘管技術上SQL沒有嵌入到Java代碼中,但它仍駐留在您的某個應用程序包中。

+1

很少將密碼加密成比[salting和hashing]更好的選擇(https://crackstation.net/hashing-security.htm)。 –

+0

你是絕對正確的,在我身邊的措辭不好。 –

+0

我明白這個概念完全謝謝你的迴應。在連接到外部數據庫的Java源代碼中安裝SQL代碼是安全的,其中該軟件的其他用戶也將存儲其詳細信息。例如,用戶將輸入他們的名字並生成一個加密的密碼,然後這個密碼將被上傳到數據庫。所以對於我來說,在源代碼中使用SELECT和UPDATE語句會是一個好主意嗎? – adebesin

2

當然,在源代碼中查詢並不安全。

我從來沒有見過SQL 查詢這是敏感的。通常,您接受來自用戶的敏感數據(例如輸入Swing字段的密碼),並使用它填充現有的參數化查詢,例如,

UPDATE users SET password=? WHERE username=? 
0

我不知道你是怎麼想在你的應用程序中執行某些東西而不執行它。我只是不理解你的方法。您可能想要註冊新用戶或其他內容,並且您不想以任何方式公開您的數據庫結構,對嗎?你不能這樣做,直接操作DB(通過SQL),而不是編碼到應用程序。

解決方案: 爲您的需求創建專用的REST API。所有數據庫操作處理將在服務器端(哈,你需要服務器 - 可以簡單的Apache主機的PHP),所以沒有數據庫結構的啓示等。所有你需要做的就是發送命令到服務器與適當的數據 - 用戶名和密碼。爲了最大限度地提高安全性,您應該使用SSL來與API通信。

謝謝。

相關問題