2010-11-01 149 views
1

我有一個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]; 

回答

1

你不能只是通過HTTPS執行,而不是要求?如果用NSMutableURLRequest(我不知道;我不是可可開發者)很容易做到,那可能是最簡單和最直接的改變。如果他有一部越獄手機,並且對內容進行了內存修改,那麼無論如何你都會被搞砸,但它應該阻止一個擁有數據包嗅探器的人。這絕不是完全安全的,我想它可能容易受到重播攻擊(也許我錯了),但一次又一次地發佈相同的分數可能不會獲得多少收益,這不是銀行數據,我們我正在談論。

+0

悅 - 我會考慮HTPPS,謝謝! – 2010-11-01 10:47:09

1

可以自動生成一個後置碼是一個唯一的號碼包括[APP_ID] + [DEVICE_ID]然後對其進行編碼和追加到HTTP請求。然後在數據庫中保存評分之前,解碼並檢查郵政編碼是否合法。如果你在發送到服務器之前編碼所有數據(分數,遊戲ID,遊戲名稱,用戶名......)會更安全。

+0

DucN - 感謝你的答案 - 你會給我一個小指針,告訴我如何開始編碼?我不知道。 – 2010-11-01 10:46:39