2016-07-24 12 views
5

Rzeczy nie są tak jasne, jak mogłyby być w najlepszej praktyce przechowywania danych zalogowanych na telefonie użytkownika. Niektórzy sugerują, że dane takie jak dane typu userID = 123 i loggedIn = true powinny być przechowywane w danych NSUSerDefaults. Jednak według mojego rozumowania, dane te można łatwo manipulować przy pomocy bardzo niewielkiego, zgodnie z tym artykułem, https://www.andyibanez.com/nsuserdefaults-not-for-sensitive-data/iOS Swift Gdzie przechowywać użytkownika Logowane dane lub token OAuth?

Zatem pytanie brzmi: Jaki jest najlepszy sposób na utrzymywanie zalogowanych danych, gdy użytkownik porusza się po różnych ekranach. Jedyne dane, które muszą być przechowywane, to userID lub OAuth Token wraz z kilkoma innymi bitami niestandardowymi o statusie konta tego użytkownika. Jaki jest najbezpieczniejszy sposób przechowywania tych danych, aby upewnić się, że ktoś nie może po prostu udawać, że jest innym użytkownikiem, gdy dane są pobierane z serwera?

Pozdrawiam, Michael

+1

Myślę, że NSUserDefaults powinno być w porządku. Z mojego zrozumienia, ktoś musiałby fizycznie mieć twój telefon, aby uzyskać dostęp do tych informacji, a jeśli mają swój telefon, jego rodzaj punktu spornego w każdym razie nie jest to? –

+0

Więc jeśli identyfikator użytkownika jest przechowywany w sposób nieszyfrowany, co ma na celu powstrzymanie kogoś od wypróbowania ID użytkownika 0001, 0002, 0003 itp. Do odgadnięcia tych informacji w celu wypróbowania jakiegokolwiek konta dostępu, jeśli dane te są przechowywane w niezaszyfrowany sposób. Oczywiście ID użytkownika są znacznie bardziej złożone niż liczby iteracyjne, choć w końcu byłoby to technicznie możliwe. Czy najlepiej byłoby powiedzieć, że przechowujesz tylko długi ID użytkownika i nic więcej, a następnie sprawdzasz wszystko inne na serwerze, aby uniknąć aplikacji polegającej na danych w NSUserDefaults? –

Odpowiedz

4

NSUserDefaults API jest złym miejscem do przechowywania REST żeton i wszelkiego rodzaju tajnych danych.
Ponieważ nie jest to bezpieczna metoda, nie ma szyfrowania. Ponadto można go łatwo otworzyć i odczytać za pomocą inżyniera wstecznego.

Proponuję, aby przechowywać go w pęku kluczy. Brelok jest o wiele lepszym rozwiązaniem, ponieważ jest bezpieczniejszy i ma szyfrowanie. Spójrz na numer referencyjny iOS Keychain Services Task, aby uzyskać więcej informacji na temat implementacji magazynów z pęku kluczy.

Należy również pamiętać, że jest to dość czasochłonne zadanie, a użytkownik może być zainteresowany bibliotekami z 3 stronami, opakowaniami pęsetowymi. Polecam bibliotekę SSKeychain lub GenericKeychain przykładowy projekt Apple.

Powiązane problemy