2009-10-13 7 views
16

Apple conseille d'utiliser NSUserDefaults pour stocker toutes vos préférences d'applications. Cependant, il semble que NSUserDefaults est très facilement modifiable. Y a-t-il un moyen de sécuriser cela? Je ne cherche pas un moyen de le rendre impossible à modifier, mais plutôt de le rendre plus difficile afin que les utilisateurs ne soient pas tentés de changer les variables internes de l'application.Comment sécuriser NSUserDefaults?

Répondre

-1

pour iPhone? Ils ne peuvent pas modifier ces variables, il n'y a pas de Terminal.app pour changer cela (sauf les appareils jailbreakés, mais c'est un problème pour Apple, pas pour vous). Pour les applications de bureau, vous pouvez l'encoder en utilisant NSData, et ils seront archivés comme base 64.

+0

Je suis préoccupé par les dispositifs jailbreakés. – erotsppa

+0

"C'est un problème pour Apple, pas pour vous" Je ne pense pas que c'est valable. Si votre application stocke quelque chose de précieux, c'est seulement une question de temps avant que quelqu'un fasse un ver/virus qui cible les téléphones jailbreakés et ramasse ces données et les envoie à la maison. – AlBeebe

+0

Si vous avez besoin de stocker quelque chose de sensible, utilisez le Keychain, pas NSUserDefaults. –

0

Pour être honnête, cela semble être un nonissue sauf si vous voulez stocker quelque chose dans NSUserDefaults qui devrait être gardé secret de l'utilisateur. Les utilisateurs ne vont pas vraiment dans leurs préférences et les éditent directement, sauf s'il y a quelque chose de caché qui ne peut pas être changé via l'interface utilisateur (comme les préférences cachées qu'Apple ne vous donne pas une interface utilisateur à changer, mais qui ont de vrais , stable, effets utiles si changé).

4

Vous pouvez stocker des données vraiment sécurisées dans l'iPhone Keychain. Les alternatives à cela sont vos propres classes de cryptage (peuvent limiter la distribution des applications), ou l'obscurcissement par un autre encodage comme nsdata, base64, etc.

4

NSUserDefaults ne doit contenir que les paramètres que vous voulez que votre utilisateur puisse modifier. Les données internes de l'application ne doivent pas figurer dans NSUserDefaults. Enregistrez vos données internes dans un NSDictionary et écrivez-le dans un fichier distinct dans vos documents apps ou dans le dossier tmp.

NSDictionary* dict = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; 
BOOL succeeded = [dict writeToFile:[self dbFullPathName] atomically:YES]; 
2

utiliser un algorithme cryptographique comme AES pour chiffrer les données que vous stockez dans NSUserDefaults. Garder la clé de chiffrement intégrée à votre application, soit codée en dur, soit calculée à l'aide d'une succession d'opérations sur plusieurs éléments dissuaderait toute initiative d'édition par rapport aux valeurs que vous stockez. Pour faciliter les choses, vous devriez écrire une méthode wrapper qui prend une clé et une valeur en clair, les crypte, puis les stocke dans NSUserDefaults pour vous, et, bien sûr, fait la même chose à l'inverse en relisant les valeurs. Notez, cependant, que cela sera plus lent que le stockage non sécurisé, en tenant compte du temps de cryptage/décryptage, alors pensez à appliquer la technique uniquement aux options de configuration les plus sensibles de votre application.

9

J'ai écrit une catégorie simple à utiliser et de petite taille dans ce but précis. Fonctionne sur iPhone et Mac OS X, c'est gratuit et sous licence MIT. Vous pouvez le trouver sur github: SecureUserDefaults

+2

il se bloque sur mon application – OMGPOP

+0

@OMGPOP grand fan :) –

22

Si un élément de données n'est pas sensible (par exemple, la taille de police par défaut), stockez-le dans NSUserDefaults.

S'il doit être protégé de l'espionnage occasionnel (par exemple, le mot de passe de l'utilisateur), stockez-le dans le trousseau.

Si elle doit être sécurisée par l'utilisateur (par exemple, le code d'enregistrement), vous devrez rouler votre propre chiffrement, puis stocker les données où vous le souhaitez.

+0

Keychain persisteront des valeurs au-delà de la désinstallation. Nue dans cet esprit en l'utilisant – xximjasonxx

Questions connexes