2010-03-26 74 views
3

我一直在使用MySQL編寫Web應用程序,時間很長。我總是將我的數據庫連接信息存儲到配置變量中,並以此方式連接到數據庫。如何使用java小程序安全地與數據庫進行通信

客戶想要一個Java小程序爲他們的網站與他們的數據庫進行通信。我對此猶豫不決,因爲applet將會公開,我不知道如何去存儲數據庫連接信息。

我很偏執,有人會反編譯我的應用程序或找到某種方式來提取我的數據庫連接信息並惡意使用它。

有關如何安全地執行此操作的任何建議?

回答

5

只是爲了澄清一下,你並不太擔心連接被「偷聽」,你擔心有人可能會破解你的applet並提取數據庫連接的細節,對吧?

那麼我可能不會讓它直接連接,而是讓它與一個以JSON/XML返回數據的Web應用程序進行通信。如果他們真的想要的話,人們仍然可以從applet中抓取它,但它們僅限於Web應用程序的功能。

如果這不會讓你的船浮起來,請確保applet使用的數據庫用戶僅限於做它所需要的。如果只是拉取數據,不要給它插入權限。

如果你只是在做寫操作,另一個選擇是有一個公共數據庫和一個私人數據庫。從你的小程序寫入到公共數據庫中,並在驗證後進行同步。這樣做的問題是,除非您保留公共數據庫中的所有數據的副本,否則可能會丟失一些內置的檢查和關係 - 這可能不安全。

另一種選擇可能是爲每個用戶分配自己的數據庫用戶。然後,如果有人未經授權得到小程序,他們仍然需要一個帳戶才能進入。

我認爲構建一箇中介網絡應用程序可能是您最好的選擇,但我不知道完整的場景,所以我不是最好的判斷。

+0

什麼AMFPHP確實爲閃存正確相似? 因爲我還沒有找到關於這一特定問題 – WarmWaffles 2010-03-26 08:35:20

+0

當然#2問題我也問這個的一般情況。 AMFPhp稍微比你需要的密集程度更高,因爲它將數據串入到動作腳本語法分析中......你有更多Java選擇,你可以分析你喜歡的任何東西。 JSON是有道理的IMO,因爲它既輕量級,PHP也可以輕鬆地串行化爲JSON,並且有很多免費的Java庫。 – Oli 2010-03-26 12:20:57

1

我會建議有一個applet與網站進行通信。其本身與數據庫進行通信。

1

這是一個trusted client問題,沒有深入研究關於標準JDBC連接證書之上的身份驗證擴展的JDBC,我建議您通過自己的數據庫層包裝所有請求。

我實際上已經實現了一個使用Ajax的JDBC包裝器,其中客戶端將JS內部的SQL語句直接發佈到一個將這些語言轉換爲DB請求的Servlet,我實現了更新和查詢,並且整個實現少於300行Java Servlet代碼和60行JS代碼。

該解決方案不包括任何身份驗證,但很容易添加到HTTP層之上。無論如何,你有一個值得信賴的客戶端問題,它不能解決被黑客戶端可以在任何預定義或指定的用例之外訪問整個數據庫模式的問題,G:

select * FROM records

相反後端請求的:

SELECT id, data, val, ... FROM records WHERE userid = ...

其中僅選擇先前由認證的用戶創建的記錄。確保安全性的唯一方法是隻通過預定義的數據檢索/修改方法訪問數據庫。否則,安全性和數據隔離必須由數據庫本身強制執行,請閱讀「貴大O數據庫」 :)

我的400線JS/Java示例以上是在測試系統中只有房子的使用用途。

相關問題