2010-08-17 76 views
4

這裏是我的問題:如何確保發送到服務器的GPS位置準確?

我有一個手機應用程序,我想給用戶一些信息,根據他們的位置(想像FourSquare一樣)。但如何確保用戶的位置是真實的?

我的意思是讓我們說客戶端通過HTTP使用到服務器的請求:

http://www.myserver.com/getdata?lat=X&long=Y

惡意用戶可以很容易地修改值。
那麼如何確保值是準確的?

+1

你真的想要一個移動設備,應任何惡意服務器的請求,別無選擇,只能傳輸你的座標給它嗎? – 2010-08-17 09:23:52

+0

您可能希望爲識別作弊者的用戶提供徽章:)(即將問題委託給人類)。 – 2010-08-17 09:35:35

+0

順便說一句:這可能會讓你感興趣:http://techcrunch.com/2010/02/16/foursquare-cheating/ – 2010-08-17 09:36:19

回答

1

你不能。正如你已經想到的那樣,客戶端總是可以操縱發送給服務器的請求。

您可以在服務器端做的唯一事情是過濾不太可能的座標(例如在海上,取決於座標的含義)。

0

有人可以欺騙/僞造手機,將GPS協調設置到其他地方。正如@JochenJung所說,總是可以改變請求。

0

我一直在想同樣的事情,但是害怕它是不可能的。 一些想法我有:

  • 添加某種座標的散列你可以檢查服務器方太的請求。 這需要客戶端了解加密算法(和密鑰),並再次使其變得易碎
  • 檢查前一個請求與現在之間的時間是否允許該類型的位置更改。相當難,因爲你永遠不知道第一個請求是不是欺詐,你不知道客戶端可能使用什麼樣的傳輸方式
+0

是的,我正在考慮用共享密鑰對它進行加密。但後來的關鍵將在客戶端上,這將是完全可以破解的... – 2010-08-17 09:39:22

+1

到目前爲止,我能想出的最好是混淆..但這不是一個真正的解決方案 – 2010-08-17 09:47:25

+2

問題是,即使你可以使url對於實際的GPS測量是真實的,仍然有可能僞造實際的GPS測量值。 – 2010-08-17 09:50:54

1

你總是可以使用pgp加密應用程序,然後發送一個數據包到服務器將解碼消息,你會知道這是發送請求的程序。

所以,如果用戶想僞造座標,他需要破解手機上的軟件才能真正做到這一點。

希望能給你一些想法...

在另一方面,你可以發出在第一次接觸到服務器(認證或類似的東西)的散列,並且對您的移動應用一些簡單的數學: X your_hash和y your_hash或類似的東西(應該是更復雜的,因爲它很容易猜測) 然後在服務器上: http://www.myserver.com/getdata?lat=x&lon=y 然後:上的應用程序的服務器端: LAT =緯度/ your_hash lon = lon/your_hash 現在如果緯度/經度偏離電網,那麼JochenJung在海邊某處說......你可以忽略這個要求。 ,並且僅僅因爲您想要確定哪個用戶發送了請求,您將需要對查詢字符串進行一些標識,這可以用作附加變量以創建更好的結果。