Apple consiglia di utilizzare NSUserDefaults per memorizzare tutte le preferenze dell'app. Tuttavia, sembra che NSUserDefaults sia facilmente modificabile. C'è un modo per garantire questo. Non sto cercando un modo per rendere impossibile la modifica, rendendola più difficile in modo che gli utenti non siano così tentati di modificare le variabili interne dell'applicazione.Come proteggere NSUserDefaults?
risposta
per iPhone? Non possono alterare queste variabili, non c'è Terminal.app per cambiarlo (eccetto i dispositivi jailbroken, ma questo è un problema per Apple, non per te). Per le app desktop, è possibile codificarle utilizzando NSData e verranno archiviate come base 64.
Per essere onesti, questo sembra un non-merito a meno che non si desideri archiviare qualcosa in NSUserDefaults
che dovrebbe essere tenuto nascosto all'utente. Gli utenti non entrano realmente nelle loro preferenze e li modificano direttamente, a meno che non ci sia qualcosa di nascosto in ciò che non può essere modificato attraverso l'interfaccia utente (come le preferenze nascoste che Apple non ti fornisce un'interfaccia per cambiare, ma che hanno reali , stabile, effetti utili se modificati).
È possibile memorizzare dati davvero sicuri nel portachiavi di iPhone. Le alternative a questo sono le tue classi di crittografia (può limitare la distribuzione delle applicazioni) o l'offuscamento attraverso altre codifiche come nsdata, base64, ecc.
NSUserDefaults deve contenere solo le impostazioni che vuoi che l'utente possa modificare. I dati interni dell'app non dovrebbero essere in NSUserDefaults. Salvare i dati interni in un NSDictionary e scriverli in un file separato nei documenti dell'app o nella cartella tmp.
NSDictionary* dict = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
BOOL succeeded = [dict writeToFile:[self dbFullPathName] atomically:YES];
usare un algoritmo crittografico come AES per crittografare i dati memorizzati in NSUserDefaults. Mantenere la chiave di crittografia incorporata nell'app, codificata o calcolata utilizzando una successione di operazioni su più elementi, può dissuadere qualsiasi iniziativa di modifica sui valori memorizzati. Per semplificare le cose, dovresti scrivere un metodo wrapper che prenda una chiave e un valore in chiaro, li cripta e poi li memorizzi in NSUserDefaults per te, e, ovviamente, fa la stessa cosa al contrario quando legge i valori indietro. Presta attenzione, tuttavia, che sarà più lento rispetto all'archiviazione non sicura, tenendo conto del tempo di crittografia/decodifica, quindi considera di applicare la tecnica solo alle opzioni di configurazione più sensibili della tua app.
Ho scritto una categoria semplice da usare e piccola per esattamente quello scopo. Funziona su iPhone e Mac OS X, è gratuito e con licenza MIT. Puoi trovarlo su github: SecureUserDefaults
si blocca sulla mia app – OMGPOP
@OMGPOP big fan :) –
Se una parte di dati non è sensibile (ad esempio, la dimensione predefinita del carattere), memorizzarla in NSUserDefaults.
Se è necessario proteggersi da snooping casuale (ad es., Password dell'utente), memorizzarlo nel portachiavi.
Se è necessario essere protetto dall'utente (ad es. Codice di registrazione), sarà necessario eseguire il rolling della propria crittografia, quindi archiviare i dati ovunque si desideri.
Keychain persisterà i valori oltre la disinstallazione. Bare che in mente quando lo si utilizza – xximjasonxx
- 1. Come testare con NSUserDefaults?
- 2. Come proteggere le DLL?
- 3. Come proteggere l'estensione chrome
- 4. Come proteggere webHttpBinding?
- 5. Come proteggere Redis Cluster?
- 6. Come proteggere CouchDB
- 7. Come utilizzare NSUserDefaults con AppDelegate
- 8. come memorizzare NSMutableArray in NSUserDefaults
- 9. NSUserDefaults - Xamarin
- 10. Come proteggere o proteggere il codice java dalla decompilazione
- 11. Salva stringa in NSUserDefaults?
- 12. Come proteggere il token .ASPXAUTH
- 13. Come proteggere le DLL .NET
- 14. Come proteggere una API dall'abuso?
- 15. come proteggere contro LDAP Injection
- 16. Come proteggere un'API REST privata
- 17. Come proteggere i BLOB BLU
- 18. Come "Proteggere" le chiamate AJAX?
- 19. Come proteggere "master" in github?
- 20. Swift NSUserDefaults setString: forKey :?
- 21. Rileva modifiche su NSUserDefaults
- 22. Problemi/Domande riguardanti NSUserDefaults
- 23. NSUserDefaults provoca app rifiutare
- 24. È NSUserDefaults threadsafe
- 25. Override AppleLanguages in NSUserDefaults
- 26. NSUserDefaults vs NSCoding
- 27. Come leggere la stringa da NSUserDefaults
- 28. Come posso salvare un UIColor con NSUserDefaults?
- 29. Come utilizzare NSUbiquitousKeyValueStore e NSUserDefaults insieme
- 30. iPhone: come posso archiviare UIImage usando NSUserDefaults?
Sono interessato ai dispositivi jailbroken. – erotsppa
"questo è un problema per Apple, non per te" Non penso che sia valido. Se la tua app memorizza qualcosa di prezioso, è solo una questione di tempo prima che qualcuno faccia un worm/virus che si rivolge a telefoni jailbroken e recupera quei dati e li spedisce a casa. – AlBeebe
Se è necessario memorizzare qualcosa di sensibile, utilizzare il portachiavi, non NSUserDefaults. –