2011-08-31 86 views
1

我打算使用JSON來實現客戶端服務器通信。我的目標是讓Java服務器通過來自Iphone-app的HTTP-Post接收數據。JSON:拒絕來自第三方的服務器請求

我擔心的我怎麼能肯定的事實,即Java的服務器只接收的數據來自於iPhone的應用程序?其他人可能會捕獲Java-Server URL併發送操縱數據?

我有機會認識到這一點嗎? SSL僅對傳輸的數據進行加密,但我認爲不能解決問題。

親切的問候

stormsam

+0

對於iPhone,您可以將udid發送到網絡服務器,以便它能夠檢測到udid是否具有一定的價值,這意味着此請求來自iPhone,否則不是 – dark

回答

1

你可以發送被硬編碼到您的應用程序的令牌。沒有這個有效的toke應該被拒絕。或者您可以使用.htaccess並在您的應用程序中指定用戶和密碼。

+0

以及如果發現令牌被發現會怎樣? – binnyb

+0

@binnyb,都可以被發現,問題是人們想要保護它多遠。您可以使用256個SSL加密連接。您可以使用在您的應用中生成的一次性令牌。你可以做很多事情。 – Cyprian

+0

這不是完美的,但它可能是最實用的路線。 (如果您可以提供關於如何生成一次使用令牌的建議的鏈接,也許會更有幫助。) –

0

你可以使用公共密鑰加密,具有自己的鑰匙和你保持跟蹤誰是合法的用戶。這是我能想到的最可靠的方案。那,或給每個用戶一個用戶名和密碼。但是,這可能比它的價值更麻煩,但仍不能防止已註冊但仍然存在惡意的用戶。

嵌入在應用程序中的令牌,然後用請求發送時,如塞浦路斯暗示,可能是最簡單的方案,並可能會工作得很好,但可能會比較容易進行逆向工程。

是個較好的解決方案可能是編入您的應用程序能夠將任何給定的輸入到輸出的功能;然後,您的服務器通過嚮應用程序提供一段數據進行轉換並檢查結果來響應請求。通過測試的客戶端會獲得會話令牌,以允許其繼續進行。不過,這確實需要額外的往返身份驗證。而且對於反向工程來說,它仍然是不可避免的,因爲所有需要的信息都存儲在用戶計算機上的應用程序中。

0

假設你可以合理地保護您的iOS應用被dissambled,你可以使用"signed requests" like the Facebook API(也可能是其他人):

你需要一個共享的祕密客戶端和服務器(例如一個隨機字符串/字節數組)。 iOS應用然後散列所有請求參數加上共享祕密並追加散列作爲附加請求參數,例如myserver.com/ws?item=123&cat=456變成myserver.com/ws?item=123&cat=456&hash=1ab53c7845f7a。在收到請求後,服務器將重新計算常規參數和共享密鑰的散列值,並將其與參數值sig進行比較。如果兩者相同,則認爲該請求有效(假設您的iOS應用完整)。

這種方法的優點是,它不需要額外的往返擷取任何一個時間/ CSRF預防令牌,並且不需要加密請求和響應(只要你只關心完整性的要求,而不是保密)。

0

您可能需要看一看this。它可能會給你一些方向。

相關問題