验证iPhone HTTP请求

问题描述:

我有一个iPhone游戏,我用套索网页分数添加到MySQL数据库。 它现在工作正常,但我得到一个'用户',连续提交数百个不可能的好分数。我知道这不可能做到'合法'的方式。 我现在正在更新应用程序,并希望避免这样的废话。 我最初的想法是去Game Center,我会这样做,但这个更新几乎是完美的,所以我宁愿不再打开它。验证iPhone HTTP请求

什么是测试如果一个HTTP请求从我的应用程序来使用iOS deviced而不是从某些机器人或脚本的好办法?

谢谢! Hanaan

这是我的请求代码:

int gameTypeId = 1; // Nonograms=1, Nonograms iPad=2, LoopMaster=3 

NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"player_name"]; 
NSString *place = [[NSUserDefaults standardUserDefaults] objectForKey:@"player_where_from"]; 
NSString *scoreString = [self formatFinalScore]; 

NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; 
[parameters setValue: name forKey: @"name"]; 
[parameters setValue: place forKey: @"place"]; 

NSString *post1_encodestrings = [@"" stringByAppendingString: [parameters urlEncodedString]]; 
NSString *post1 = [NSString stringWithFormat: @"game_id=%d&game_size=%d&game_level=1&score=%f&score_string=%@&%@",gameTypeId,self.thisGameSize,self.gameFinalScore,scoreString,post1_encodestrings]; 

NSData *postData = [post1 dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init]autorelease]; // 
[request setURL:[NSURL URLWithString:@"http://www.tmipublishing.com/hotcocoa/lasso/add_score_to_database.lasso"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

你不能只是通过HTTPS执行,而不是要求?如果用NSMutableURLRequest(我不知道;我不是可可开发者)很容易做到,那可能是最简单和最直接的改变。如果他有一部越狱手机,并且对内容进行了内存修改,那么无论如何你都会被搞砸,但它应该阻止一个拥有数据包嗅探器的人。这绝不是完全安全的,我想它可能容易受到重播攻击(也许我错了),但一次又一次地发布相同的分数可能不会获得多少收益,这不是银行数据,我们我正在谈论。

+0

悦 - 我会考虑HTPPS,谢谢! – 2010-11-01 10:47:09

可以自动生成一个后置码是一个唯一的号码包括[APP_ID] + [DEVICE_ID]然后对其进行编码和追加到HTTP请求。然后在数据库中保存评分之前,解码并检查邮政编码是否合法。如果你在发送到服务器之前编码所有数据(分数,游戏ID,游戏名称,用户名......)会更安全。

+0

DucN - 感谢你的答案 - 你会给我一个小指针,告诉我如何开始编码?我不知道。 – 2010-11-01 10:46:39