我有一款 iPhone 游戏,我使用 LASSO 网页将分数添加到 MySQL 数据库。 它现在工作正常,但我得到一个“用户”连续提交了数百个不可能的好分数。我知道这不可能以“合法”的方式进行。 我现在正在更新应用程序并希望避免此类废话。 我最初的想法是去 Game Center,我会的,但这次更新几乎是完美的,所以我不想再打开它。
测试 HTTP 请求是否来 self 的应用程序的 iOS 设备而不是来自某些机器人或脚本的好方法是什么?
谢谢! 哈南
这是我的请求代码:
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
很容易做到(我不知道;我不是 Cocoa 开发人员),这可能是最简单和最直接的更改。如果他有一部越狱的手机并且在内存中修改了乐谱,那么你无论如何都完蛋了,但它应该阻止一个有数据包嗅探器的人。它绝不是完全安全的,我想它可能容易受到重放攻击(也许我错了),但一遍又一遍地发布相同的分数可能不会给你带来太多好处,这不是我们的银行数据正在谈论。
关于iphone - 验证 iPhone http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066295/