验证iPhone http请求

时间:2010-11-01 02:18:15

标签: iphone mysql http

我有一个iPhone游戏,我使用LASSO网页为MySQL数据库添加分数。 它现在工作正常,但我得到一个“用户”,连续提交了数百个不可思议的好成绩。我知道这不可能采取“合法”的方式。 我现在正在更新应用程序,并希望避免这样的废话。 我最初的想法是去游戏中心,我会,但这个更新几乎是完美的所以我宁愿不再打开它。

如果一个HTTP请求来自iOS设备而不是来自某个机器人或脚本,那么测试HTTP请求的好方法是什么?

谢谢! 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];

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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