2013-04-20 67 views
2

首先,我知道這已經被問了幾次了,而且我已經對這個主題做了大量的研究,但是我似乎無法找到明確的答案。我要麼失去了一些至關重要的東西,要麼這是不可能的,我只是在浪費你的時間。這裏是:一個安全的三層連接,從java到mySQL,通過PHP

想象一下,一個數據庫,它存儲我們說的只有1000行,由一個id,一個布爾值(0或1)組成,必須在某個點上更改,並且帶有一些信息的常量字符串值。如果用戶在客戶端Java應用程序中提交了所需的操作,則可以訪問該信息並更改該值。只有這是至關重要的。

在我的全球網絡搜索過程中,我遇到了兩個可以滿足我需求的選項。

  1. 爲每個用戶設置數據庫本身的權限,讓用戶使用自己的用戶名和密碼從應用程序登錄。客戶端應用程序隨後可以根據用戶的需要與數據庫通信,根據需要執行讀取和寫入數據庫的任務。

  2. 使用三層方法,讓java應用程序與執行查詢的PHP接口進行通信,並返回java應用程序可以解析的排序的編碼json字符串。我明白了基本概念,您將客戶端的用戶名和密碼發送到PHP接口,該接口檢查客戶端是否合格並相應地執行查詢。沒什麼大不了的。

我似乎無法弄清楚的是如何讓只有java客戶端更改和檢索數據。例如,如果有人想知道方法1中字符串的內容,他們可以簡單地使用他們的用戶名和密碼並直接查詢數據庫。查詢很容易從反編譯後的java應用程序中獲取。至於#2,如果應用程序反編譯,則PHP接口也可以進行反向設計,即使不知道數據庫的實際密碼和用戶名,用戶也可以通過利用PHP腳本查詢數據庫。

我必須指出,根本不信任用戶,數據庫的內容應該保密,直到java應用程序中滿足某些條件。有沒有辦法實現這一點?如果有一種方法我不知道,我當然不會停留在這兩個選項上。感謝您提前給予您所有的幫助。

+0

你對「某些條件」有什麼意思?是否可以遠程驗證? – ddmps 2013-04-20 15:33:06

+0

把它看成是一種成就係統,就像在客戶端完成一個遊戲,或者擁有高分等一樣,對不起,我不能將所有這些想法都放棄。我無法想象通過反編譯java代碼無法複製的遠程驗證方式... – JasonX 2013-04-20 15:43:22

回答

0

我們正在實施類似於PHP後端的HTML5/Javscript SPA,但是它會向Java服務器API發出SOAP請求以處理所有MySQL事務。這樣做的好處是客戶端只能看到HTML和縮小的Javascript,沒有對Java服務器的調用,但他們仍然能夠看到我的PHP服務器的AJAX調用。由於Java函數是直接從服務器而不是客戶端通過SOAP調用的,因此我將90%的安全性集中在HTML5/PHP服務器上。 Java服務器只需限制對我的服務器IP的訪問,並且只接受格式正確的SOAP請求。這就是說,我已經進行了檢查以阻止這種情況發生,並希望阻止99%的用戶完成對系統的「黑客攻擊」:會話,定時器以確保客戶端不會太快或者沒有太多的呼叫在此之前的一個電話,縮小代碼,在我的通話中設置特定的標題等等。它是否有缺陷?是。但是有一些記錄系統可以跟蹤企圖。然後,我們可以阻止訪問那些經常或無論發出無效請求的人。

最終會出現類似的設置,但請記住,記錄無效呼叫並定期檢查這些設置或設置通知系統會減少嘗試次數。如果您直接在用戶可反編譯的Java部分中使用MySQL調用,我會勸阻的,但只需在處理這些調用的PHP服務器上調用一個函數即可。這至少會隱藏來自用戶的數據庫描述以防止黑客攻擊。

隨着每個應用程序,只是密切監視。當你看到成功的黑客時,找出一種方法來阻止下一次。這樣它永遠不會以同樣的方式工作兩次。

+0

我擔心有人會說...基本上,我沒有別的選擇,只能訪問PHP/mySQL儘可能難以避免太多的性能風險。謝謝你的確認,我會讓這個問題持續一兩天,如果沒有更具體的問題出現,你會得到接受的答案,因爲我猜想沒有什麼可補充的。謝謝! – JasonX 2013-04-20 16:02:36