2011-12-29 151 views
0

我有以下情況: Android客戶端通過HTTP Post與PHP服務器進行通信。 PHP服務器正在與mySQL數據庫進行通信,並將輸出作爲JSON發送給Android客戶端。保護連接到php服務器

現在我擔心的是,人們嗅探流量,找出網址,並會在我的數據庫中發佈大量圖片。 我不關心嗅探有效載荷。所以它不一定是加密的。

我想到的是因爲HTTP連接而想到的TLS/SSL。但我不確定在這種情況下最好的方式是什麼。

+0

這是Web應用程序級別的授權問題。 – Gumbo 2011-12-29 16:35:08

+0

是的,沒錯。沒有使用用戶名/密碼的最佳方式是什麼? – tobias 2011-12-29 16:38:31

回答

3

你想要做的是採用相互認證的SSL,這樣你的服務器將只接受來自你的應用的傳入連接,你的應用只會與你的服務器通信。

這是高層次的方法。創建一個自簽名服務器SSL證書並部署到您的Web服務器上。爲此,您可以使用Android SDK附帶的keytool。然後創建一個自簽名客戶端,並將其作爲資源部署在您的應用程序中的一個自定義密鑰庫中(keytool也會生成這個)。將服務器配置爲需要客戶端SSL身份驗證,並僅接受您生成的客戶端證書。配置客戶端使用該客戶端證書來標識自身,並且只接受您在服務器上安裝的那一部分服務器端證書。

如果不是你的應用程序的嘗試之外的其他人/東西連接到服務器,SSL連接不會被創建,因爲服務器會拒絕不出示,你已經包括在你的應用程序客戶端證書傳入的SSL連接。

這是一個比這裏保證的更長的答案。我建議分步實施,因爲網上有資源介紹如何處理Android中的自簽名SSL證書,包括服務器和客戶端。我的書中還有一個完整的步驟,由O'Reilly出版,Application Security for the Android Platform

1

SSL不會對你有所幫助,因爲在數據觸及網絡之前可能會嗅探流量,人們仍然能夠找出你的API調用並填充數據庫。

您可以使用訪問令牌和用戶名/密碼要求來「保護」服務。但同樣,它們不會阻止惡意用戶使用錯誤的數據淹沒系統。但是,它會讓你跟蹤哪些用戶正在這樣做,因爲他們必須使用某種唯一的訪問令牌來訪問你的系統。

+0

你是對的。我不想使用用戶名/密碼登錄。所以我不擔心那些使用App的人填滿我的數據庫。我擔心來自個人電腦的人可能會將其氾濫。 – tobias 2011-12-29 16:28:49