Zastanawiam się nad zabezpieczeniem wspólnych preferencji.
Czy można uzyskać dostęp do wspólnych preferencji, nawet jeśli zostały utworzone w MODE_PRIV (0)?
Czy można wyświetlić listę wszystkich dostępnych wspólnych preferencji, a następnie pobrać wszystkie ustawienia z innych aplikacji?
Czy sharedpreferences to dobre miejsce na umieszczenie poufnych danych, takich jak hasło lub token uwierzytelniania?
Dzięki
android
security
sharedpreferences
Marek Sebera
źródło
źródło
Odpowiedzi:
Współdzielone preferencje są przechowywane jako plik w systemie plików na urządzeniu. Są one domyślnie przechowywane w katalogu danych aplikacji z ustawionymi uprawnieniami systemu plików, które zezwalają tylko na UID, z którym działa określona aplikacja, aby uzyskać do nich dostęp. Są więc prywatne, ponieważ uprawnienia do plików Linuksa ograniczają do nich dostęp, tak samo jak w każdym systemie Linux / Unix.
Każdy, kto ma dostęp do urządzenia na poziomie administratora, będzie mógł je zobaczyć, ponieważ root ma dostęp do wszystkiego w systemie plików. Ponadto każda aplikacja działająca z tym samym UID co aplikacja tworząca będzie mogła uzyskać do nich dostęp (zwykle nie jest to wykonywane i musisz wykonać określone działanie, aby dwie aplikacje działały z tym samym UID, więc prawdopodobnie nie jest to duży sprawa). Wreszcie, jeśli ktoś byłby w stanie zamontować system plików twojego urządzenia bez korzystania z zainstalowanego systemu operacyjnego Android, mógłby również ominąć uprawnienia ograniczające dostęp.
Jeśli obawiasz się takiego dostępu do swoich preferencji (lub jakichkolwiek danych zapisanych przez Twoją aplikację), zechcesz to zaszyfrować. Jeśli tak cię to obchodzi, będziesz musiał dokładnie dowiedzieć się, ile ochrony jest konieczne dla poziomu ryzyka, który widzisz. Bardzo obszerna dyskusja na ten temat znajduje się w dokumencie Application Security for the Android Platform , opublikowanym właśnie w grudniu 2011 r. (Zastrzeżenie: jestem autorem tej książki).
źródło
SharedPreferences to nic innego jak pliki XML w twoim telefonie / data / data / folder, więc każda aplikacja lub użytkownik z uprawnieniami administratora na urządzeniu zrootowanym może uzyskać dostęp do twoich SharedPreferences, nawet jeśli zostały utworzone za pomocą MODE_PRIV
Nadal istnieje sposób, aby chronić go przed wszystkimi ... Sprawdź ten link. Tutaj możesz przechowywać dane wstępnie z szyfrowaniem, klasa jest oczywista i bardzo łatwa w użyciu.
https://github.com/sveinungkb/encrypted-userprefs
Jak powiedzieli inni, każdy może uzyskać do niego dostęp, ale w tym przypadku nikt nie może odczytać zawartych w nim danych, ponieważ są one zaszyfrowane. Więc jego secure.For najwyższą bezpieczeństwa moja propozycja będzie wygenerować klucz używany do szyfrowania w czasie wykonywania zamiast ciężko kodowania. Można to zrobić na wiele sposobów :)
źródło
SharedPref
. Ale co w takim razie zrobić z drugim kluczem? Poważnie jednak, najlepszym scenariuszem byłoby wysłanie zaszyfrowanego klucza i identyfikatora UID urządzenia do serwera za pomocą protokołu SSL w celu ich przechowywania i pobierania w razie potrzeby. Wymagałoby to łączności, ale pozwoliłoby na umieszczenie urządzenia na czarnej liście i nagle wszystkie dane zostałyby usunięte. Bez stałego połączenia z Internetem każda próba szyfrowania danych nie jest w 100% bezpieczna.Zwykle nie, inne aplikacje nie mogą uzyskać do nich dostępu, jednak należy pamiętać, że SharedPreferences są przechowywane jako pliki XML w
/data/data/
katalogu, co zasadniczo oznacza, że każda aplikacja z uprawnieniami superużytkownika na urządzeniu zrootowanym może uzyskać dostęp do twoich plikówSharedPreference
, nawet jeśli były utworzone za pomocąMODE_PRIV
źródło
Czy można uzyskać dostęp do wspólnych preferencji, nawet jeśli zostały utworzone w MODE_PRIV (0)?
Kodem nr. Ale możesz pobrać plik aplikacji, jeśli masz uprawnienia superużytkownika.
Czy można wyświetlić listę wszystkich dostępnych wspólnych preferencji, a następnie pobrać wszystkie ustawienia z innych aplikacji?
Jeśli jesteś superużytkownikiem (zrootowanymi urządzeniami), możesz pobrać wszystkie prywatne pliki aplikacji.
Czy sharedpreferences to dobre miejsce na umieszczenie poufnych danych, takich jak hasło lub token uwierzytelniania?
Nie. Można go łatwo zhakować. Jeśli chcesz umieścić jakiekolwiek poufne dane w udostępnionym pliku preferencji, możesz je zaszyfrować i zapisać. Możesz przechowywać swój klucz szyfrowania w NDK / serwerze.
źródło