2012-04-15 60 views
0

我到處搜索過,發現很多我無法理解的信息。我正在使用WAMP服務器並設法執行「SELECT name FROM Tablename」查詢並將數據傳遞給json_encode()。到目前爲止,我喜歡結果,但現在我需要保護服務器中的JSON文件,使其僅可供運行我的Android應用的用戶訪問。如何使用REST API或其他方法來保護JSON文件?

通過我的研究,我發現REST可能對我來說是一個解決方案,但我不明白我如何才能爲我的情況實現它。是否有可能具有服務器端REST安全性和客戶端?我知道REST是一個Web服務,我閱讀了一個教程,其中的Web服務基本上是一個網頁。我的優先級是服務器端json文件,安全性和速度。用戶不會通過Android應用程序插入任何信息。我正在考慮將具有用戶名和密碼的Android應用程序部署到特定的json文件(驗證)。

My Application Flow

這將是有益的,如果你可以點我的視頻教程,或者初學者教程,涉及到的問題。

這是我的具體問題?

  • 我可以用JSON解析圖像嗎?
  • 它是更有效的mysqldump - >轉換.csv文件---> SQLite的? (安全地)。
  • .CSV文件在數據庫中有多大的一百萬個條目可以得到多大?
  • 我該如何實現這一切?

請幫忙,謝謝。

+0

您應該爲每個帖子提出一個問題。拿你的其他「具體問題」部分,並在研究後在其他帖子中具體詢問他們。 – 2012-04-16 01:08:23

回答

0

解決方案:使用HTTP頭

不安全溶液:

使用用戶代理報頭。

User-Agent: MyAndroidApp/1.0 

更安全的解決方案:

首先,你需要使用SSL,所以沒有人可以只是很容易地看到你的密鑰。

其次,你可以把一個密鑰在請求的HTTP頭,然後從Android應用程序使:

X-Android-Secret-Key: fee400be-7d08-45c5-bf7c-ff79c35a838c 

您檢查服務器上的標題,只提供服務的文件回來,如果所需的標題是接收。你保持標題有點祕密,但不是用SSL難以穿透。

0

我只會回答你關於應用驗證的原始問題。你的其他問題屬於不同的問題。

如果它只是您的客戶端和服務器,您可以(也應該)使用相互認證的SSL,而無需購買任何東西。您控制服務器和客戶端,因此每個應只信任一個屬於另一個的證書,並且您不需要CA用於此目的。

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

這是一個比這裏保證的更長的答案。我建議分步實施,因爲網上有資源介紹如何處理Android中的自簽名SSL證書,包括服務器和客戶端。在O'Reilly出版的我的書「Android應用安全平臺」中也有一篇完整的介紹。

您通常會將該證書/私鑰存儲在某種類型的密鑰庫中(如果您使用的是Android,則爲KeyStore)並且該密鑰庫將被加密。該加密基於密碼,因此您需要(1)將密碼存儲在客戶端的某處,或(2)在啓動客戶端應用程序時詢問用戶密碼。你需要做什麼取決於你的用例。如果(2)可以接受,那麼你已經保護了你的憑證免受逆向工程,因爲它將被加密並且密碼將不會被存儲在任何地方(但用戶需要每次都鍵入)。如果你做了(1),那麼有人能夠逆向工程你的客戶端,獲取密碼,獲得密鑰庫,解密私鑰和證書,並創建另一個能夠連接到服務器的客戶端。

沒有什麼可以做,以防止這種情況;你可以更難地對你的代碼進行逆向工程(通過混淆等),但是你不能讓它變得不可能。您需要確定您嘗試採用這些方法緩解的風險是多少,以及需要做多少工作才能緩解風險。