我想在我的iPhone游戏中添加锦标赛模式,并使用Rails 3应用程序跟踪锦标赛统计数据。基本上,每次比赛结束时,获胜者将使用post请求报告给我的Rails 3应用程序,如…
POST http://myrail3app.com/tourney/matchresults?winner=username
显然任何人都可以监控请求的URL,然后在他们的计算机上一遍又一遍地发出相同的请求并作弊。所以我想通过某种方式来验证Rails 3应用程序上的请求,以确保请求仅来自我的iPhone应用程序。你的想法呢?
谢谢你的智慧!
使用Jason提到的UDID并不一定能阻止某人在桌面浏览器中多次转发。
你有几个选项,这取决于你想要得到的复杂程度:
a)应用程序和rails服务器之间的公钥加密阅读(iphone):http://developer.apple.com/library/mac/文档/安全/概念/CertKeyTrustProgGuide/iPhone_Tasks iPhone_Tasks.html #//apple_ref/doc/uid/TP40001358-CH208-SW9
和(rails):http://stuff-things.net/2007/06/11/encrypting-sensitive-data-with-ruby-on-rails/
你为应用程序提供了一个秘密密钥(很可能在你的objective c代码中),并生成一个HMAC签名基于你所有的发送给应用程序的参数使用您的密钥(参见http://www.ouah.org/ogay/hmac/)。你然后使用发送过来的参数生成另一个签名Rails端,并比较签名发送(如在铁轨上):
OpenSSL::HMAC.hexdigest('sha256', message, key)
)。如果两个签名都是不同的,你知道有人有吗看到Facebook(http://developers.facebook.com/docs/authentication/signed_request/)和亚马逊(http://docs.amazonwebservices.com/AWSSimpleQueueService/2007-05-01/SQSDeveloperGuide/SummaryOfAuthentication.html)
c)根据你是否想在你的应用程序和你的rails服务器之间共享其他数据,你可以在rails端实现一个Oauth提供程序。
- 阅读(rails):http://stakeventures.com/articles/2007/11/26/how-to-turn-your-rails-site-into-an-oauth-provider
- , (iphone):http://davidquail.com/2009/12/07/oauth-authorization-callback-on-the-iphone-with-webview/
你可以让网站只响应iPhone id的选择列表
NSString *deviceUDID = [myDevice uniqueIdentifier];