2014-05-09 6 views
1

Je souhaite stocker des données dans mon application iPhone au niveau local; dans ce cas, les données seraient un score élevé dans un jeu. Je veux stocker le meilleur score dans la liste des propriétés de l'application, mais j'ai un problème. Est-ce qu'un appareil jailbreaké pourrait pirater la liste des propriétés et changer le meilleur score? Je ne veux pas que les gens changent leur meilleur score et que ce score soit synchronisé avec Game Center. Merci d'avance!Stocker des données en toute sécurité sur iOS

+0

En fin de compte il n'y a aucun moyen sécurisé de stocker des données sur un téléphone, sauf si vous avez besoin d'un mot de passe de l'utilisateur quand il ouvre l'application. Et bien sûr, s'il connaît le mot de passe, il peut obtenir des données, même si d'autres ne le peuvent pas. –

Répondre

1

Oui, puisqu'un jailbreak donne accès au système de fichiers, l'utilisateur peut facilement changer n'importe quoi. Une façon de résoudre ce problème est de crypter la partition, en utilisant quelque chose comme AES, ou simplement de sécuriser les données avec une somme de contrôle.

Il y a un bel outil qui stocke de manière sécurisée vos données, Secure-NSUserDefaults, par Matthias Plappert, une bibliothèque qui enregistre les données à l'intérieur NSUserDefaults (je suppose qu'il devrait être autorisé à y enregistrer un score élevé) interdisant à l'utilisateur de le modifier.

Il ne crypte pas les données, cependant il devrait suffire pour un score élevé.

À titre d'exemple (du README du projet, avec quelques modifications pour répondre aux questions):

// Configuring user defaults. It is recommended that you do this 
// immediately after the app did launch. 
[NSUserDefaults setSecret:@"My Game Secret Key"]; 

// Write secure user defaults 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setSecureInteger:4000 forKey:@"HighScore"]; 

// Read secure user defaults 
BOOL valid = NO; 
BOOL registered = [defaults secureBoolForKey:@"HighScore" valid:&valid]; 
if (!valid) { 
    // the property has been modified, handle this situation 
} else { 
    // Valid property, do whatever you need to do 
} 

Juste pour dire. Vous pouvez en trouver plus sur la page du projet.

Questions connexes