2011-04-20 31 views
0

我想添加錦標賽模式到我的iPhone遊戲,並有一個Rails 3應用程序跟蹤比賽統計。基本上,每一個比賽結束時,獲勝者將被報告給我的Rails使用POST請求像3應用程序...我的Rail3應用程序如何驗證來自iPhone應用程序的請求?

POST http://myrail3app.com/tourney/matchresults?winner=username 

顯然,任何人都可以監測所取得的請求的URL,然後進行同樣的請求在他們的電腦上一次又一次地欺騙。所以我想用一些方法在Rails 3應用上驗證請求,以確保請求僅來自我的iPhone應用。你的想法?

非常感謝您的智慧!

回答

1

使用UDID由賈森提到不一定從重新發布,在桌面瀏覽器幾次阻止別人選擇列表響應。

您有幾種選擇,這取決於你想多麼複雜獲得:

一)您的應用程序和軌道服務器

b)您可以使用簽名生成服務,類似於Facebook和亞馬遜在其請求中處理簽名的方式。

  • 您提供密鑰的應用 (最有可能在你的目標C代碼 的地方),並基於所有 參數HMAC 簽名你與你的密鑰發送應用 (見 http://www.ouah.org/ogay/hmac/)。然後使用通過 發送的參數在軌道側生成另一個簽名,並比較發送的簽名 (例如,在導軌中: OpenSSL::HMAC.hexdigest('sha256', message, key))。如果2個簽名 不同,則知道有人篡改了參數 。

  • 見實 (http://developers.facebook.com/docs/authentication/signed_request/) 和Amazon (http://docs.amazonwebservices.com/AWSSimpleQueueService/2007-05-01/SQSDeveloperGuide /SummaryOfAuthentication.html) 有關如何執行此操作的示例。

c)根據您是否想要在應用程序和導軌服務器之間共享其他數據,可以在導軌側實現Oauth提供程序。

+0

謝謝,多米尼克,非常有幫助!關於HMAC方法的問題,是否需要每次發出請求時發送的參數都不相同以保證其安全?換句話說,如果我用來創建簽名的唯一數據是密鑰和用戶名,那麼來自單個用戶的所有請求每次都是相同的,那麼這些請求可能是僞造的,是正確的? – BeachRunnerFred 2011-04-20 01:33:14

+0

使用用戶名發送時間戳。例如:一個時代價值http://mysite.com?username=foo×tamp=1303268516&signature=abc123 – Dominic 2011-04-20 03:01:29

+0

順便說一句,你發送的簽名是由密鑰簽名的。試圖篡改參數的人如果想要更改參數(通過更改參數並根據新的參數和密鑰重新生成新簽名),必須知道密鑰。只要確保他們沒有訪問密鑰是啊? – Dominic 2011-04-20 03:19:02

0

你可以使網站只給iphone的id

NSString *deviceUDID = [myDevice uniqueIdentifier]; 
+2

無法用戶只檢查一個POST請求從他們的電話來了,然後創建從他們的計算機僞造? – BeachRunnerFred 2011-04-20 01:14:46

+0

絕對。但是這可能會發生在任如果你想加密應用程序和服務器之間的通信也是可能的。但沒有什麼是不可逾越的。你只需要權衡構建這類事情所涉及的工作,以及僞造的可能性和問題。你可能可以通過SSL實現一個web服務,但那還不夠我的範圍。 – 2011-04-20 01:26:10

相關問題