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
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.
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é).
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.
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];
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.
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
il se bloque sur mon application – OMGPOP
@OMGPOP grand fan :) –
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.
Keychain persisteront des valeurs au-delà de la désinstallation. Nue dans cet esprit en l'utilisant – xximjasonxx
- 1. iPhone NSUserDefaults
- 2. NSUserDefaults: plantage de setObject
- 3. NSUserDefaults n'épargnent pas correctement
- 4. NSUserDefaults vs sqlite3
- 5. Comment sécuriser l'enregistrement des utilisateurs?
- 6. Comment sécuriser un lien HTML statique
- 7. Comment sécuriser un webservice dans .net?
- 8. Comment sécuriser ces fonctions typées dynamiquement?
- 9. Comment sécuriser mes appels JSONResult GET?
- 10. sécuriser app.config - VB.Net 3.5
- 11. Sécuriser des sessions
- 12. Enregistrement d'une liste de contacts dans NSUserDefaults
- 13. Enregistrer les entités CoreData dans NSUserDefaults
- 14. Devrais-je m'inquiéter des collisions dans NSUserDefaults?
- 15. Comment sécuriser au mieux les enregistrements dans Rails?
- 16. Comment sécuriser des pages Web dans ASP.Net avec des rôles?
- 17. Comment sécuriser mon nouveau serveur Web (Server 2008)?
- 18. Les objets retournés par NSUserDefaults doivent être libérés ou non
- 19. Sécuriser une application web avec l'adresse mac
- 20. Je souhaite sécuriser mon fichier txt
- 21. Cocoa - Notification sur le changement de valeur NSUserDefaults?
- 22. iPhone SDK NSUserDefaults ne pas enregistrer les valeurs correctes
- 23. NSUserDefaults: À quoi sert la méthode + resetStandardUserDefaults? Comment puis-je fournir des "paramètres système"?
- 24. comment sauvegarder slidervalue et marquer la valeur dans nsuserdefaults ou de toute autre manière efficace?
- 25. Utilisation d'un service Web pour sécuriser une base de données
- 26. Utilisation de l'appartenance ASP.NET intégrée pour sécuriser les services Web
- 27. Meilleure méthode pour obscurcir ou sécuriser les assemblages .Net
- 28. Sécuriser une page "merci" contre les utilisateurs non connectés
- 29. Aidez-moi à sécuriser ce thread de code
- 30. Sécuriser les cookies de session dans ASP.NET sur HTTPS
Je suis préoccupé par les dispositifs jailbreakés. – erotsppa
"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
Si vous avez besoin de stocker quelque chose de sensible, utilisez le Keychain, pas NSUserDefaults. –