我想在我的iPhone游戏中添加锦标赛模式,并有一个Rails 3应用程序跟踪锦标赛统计数据。基本上,每次比赛结束时,获胜者将使用像...这样的帖子请求报告给我的Rails 3应用程序。
POST http://myrail3app.com/tourney/matchresults?winner=username
显然,任何人都可以监控正在进行的请求的URL,然后一遍又一遍地在他们的计算机上发出相同的请求并作弊。所以我想要一些方法来验证Rails 3应用程序上的请求,确保请求仅来自我的iPhone应用程序。你的想法?
非常感谢你的智慧!
答案 0 :(得分:1)
使用Jason提到的UDID并不一定会阻止某人多次在桌面浏览器中重新发布它。
您有几个选择,具体取决于您希望获得的复杂程度:
a)您的应用与rails服务器之间的公钥加密
b)您可以使用签名生成服务,类似于Facebook和亚马逊在其请求中处理单身的方式。
您为应用提供了密钥
(最有可能是你的客观c代码
在某处),并生成一个HMAC
签名基于你的所有
您正在发送应用的参数
用你的秘密密钥(见
http://www.ouah.org/ogay/hmac/)。您
然后使用发送的参数
在...上生成另一个签名
导轨侧,并比较签名
发送(例如在铁路:
OpenSSL::HMAC.hexdigest('sha256',
message, key)
)。如果是2个签名
是不同的,你知道有人
篡改参数。
查看Facebook (http://developers.facebook.com/docs/authentication/signed_request/) 和亚马逊 (http://docs.amazonwebservices.com/AWSSimpleQueueService/2007-05-01/SQSDeveloperGuide/SummaryOfAuthentication.html) 有关如何执行此操作的示例。
c)根据您是否要在应用程序和rails服务器之间共享其他数据,您可以在rails端实现Oauth提供程序。
答案 1 :(得分:0)
你可以让网站只响应iphone id的选择列表
NSString *deviceUDID = [myDevice uniqueIdentifier];