Dlaczego tak wiele aplikacji wymaga pozwolenia na odczyt stanu telefonu i tożsamości?

88

Dlaczego tak wiele aplikacji wymaga pozwolenia na odczyt stanu telefonu i tożsamości? Konkretnie:

Phone calls
   read phone state and identity

Na przykład Quickpedia to portal Wikipedii, ale chce mieć dostęp do telefonu. Jakie jest tego wytłumaczenie?

wprowadź opis zdjęcia tutaj

Nam G VU
źródło
To nie jest tak naprawdę, bo „tak tak, ta aplikacja ma to zezwolenie na wysyłanie SMS-ów i dzwonienie za numer premium”, co ludzie zakładają . @ Poniższa odpowiedź Christiana trafiła w sedno! Jest to uzasadnione w wielu przypadkach i dość często deweloperzy często zapominają o zmniejszeniu uprawnień (być może zatrzymaniu od wczesnych dni tworzenia aplikacji).
t0mm13b
1
@ t0mm13b Nie sądzę, że istnieje duże zapotrzebowanie na ograniczone uprawnienia poza technikami i maniakami prywatności (w tym ja). Jeśli więc twórcy aplikacji uznają za normę wymaganie pełnego pakietu uprawnień, konsumenci będą zakładać, że wiele uprawnień jest w porządku dla dowolnej aplikacji. Rząd nie wywiera na nich presji, by korzystali z minimalnych zezwoleń, a jak dotąd rynek ich nie wywiera. To znaczy, że aplikacje wymagają niewielkich kosztów, aby uzyskać niewiele uprawnień.
user29020

Odpowiedzi:

59

Pozwala aplikacji na odczyt unikalnego identyfikatora (identyfikatora telefonu o nazwie IMEI ) powiązanego z telefonem.

Może zatem pomóc w ochronie przed kopiowaniem lub w próbie śledzenia liczby użytkowników.

Obrabować
źródło
3
Zobacz to pytanie SO dotyczące uzyskania unikalnego identyfikatora telefonu, wygląda na to, że (obecnie) najbardziej wiarygodny sposób uzyskania przez programistę unikalnego identyfikatora z telefonu wymaga pozwolenia Read Phone State stackoverflow.com/questions/2785485/...
GAThrawn
40

Jest inny powód niż unikalny identyfikator. Sądzę, że połowa aplikacji w ogóle nie ma dostępu do tych wartości. Problem polega na tym, że w przypadku wersji niższej niż Android 1.5 to uprawnienie nie istnieje. Każdy mógł uzyskać dostęp do tych wartości bez konieczności żądania czegoś.

Dlatego jeśli utworzysz aplikację zgodną z wersją 1.5, to uprawnienie zostanie automatycznie dodane w celu emulacji niższego poziomu bezpieczeństwa Androida 1.5, dlatego możesz zignorować to zezwolenie w większości przypadków, ponieważ jest to po prostu problem ze zgodnością.

ce4
źródło
2
To samo dzieje się z dostępem do karty SD.
Denis Nikolaenko
1
To prawda - ale nie wyjaśnia, dlaczego aplikacje dla wersji 2.xi nowszych tak często tego chcą.
Izzy
19

Powodem jest to, że Android 1.5 i wcześniejsze nie wymagały od aplikacji konkretnego żądania tych uprawnień i automatycznego przyznawania ich. Od wersji Androida 1.6 te uprawnienia muszą być wyraźnie wymagane przez aplikację. Jeśli jednak określisz, że twoja aplikacja może działać na urządzeniach z Androidem 1.5 lub starszym, to uprawnienie jest dodawane do aplikacji domyślnie, a rynek pokazuje to zezwolenie jako wymagane przez aplikację.

Podsumowując, aplikacja może nie uzyskiwać dostępu do Twojego „stanu telefonu i tożsamości”, ale jeśli programista określi, że jego aplikacja może działać na urządzeniach z wersją 1.5 lub niższą, zostanie wyświetlone uprawnienie.


źródło
Czy masz link do jakiejkolwiek dokumentacji, która to pokazuje?
GAThrawn
developer.android.com/reference/android/os/... podaje pełną listę identyfikatorów wersji docelowej oraz zmiany uprawnień (między innymi różnicami) między nimi.
Stewart
Dobrze. Ale prawdopodobnie nie jest już „interesujący”, ponieważ aplikacje dla wersji 1.5 i niższych stały się dość rzadkie :)
Izzy
18

To pytanie niepokoi mnie od dłuższego czasu. Więc teraz w końcu postanowiłem przejść do sedna problemu.

Playstore ma aplikację o nazwie uprawnienie READ_PHONE_STATE , która żąda READ_PHONE_STATEjako jedyne uprawnienie i nie robi nic poza drukowaniem wszystkich danych, do których może uzyskiwać dostęp przy użyciu lub bez niego. Zainstalowałem to na moim LG Optimus 4X , będąc zrootowanym na standardowym Androidzie 4.0.3, i cofnąłem uprawnienia za pomocą LBE. Wyniki są dość interesujące, jak pokazują poniższe zrzuty ekranu:

Zrzut ekranu 1 Zrzut ekranu 2 Zrzut ekranu 3
Informacje zebrane za zgodą aplikacji.READ_PHONE_STATE (kliknij zdjęcia, aby wyświetlić większe warianty)

Jak łatwo zauważyć, nawet niektóre informacje, które były niedostępne bez pozwolenia, były ogólnodostępne: mój numer skrzynki pocztowej (uwaga: tak, to jest poprawny; z moim dostawcą jest skrótem podczas wybierania z twojego urządzenia, więc mogę dowolnie go wyświetlaj;) Na końcu pierwszego zrzutu ekranu zobaczysz:

  • CALL_STATE_IDLE. Dlatego nie ma połączeń przychodzących, wychodzących ani w toku. Żadna aplikacja nie potrzebuje tego uprawnienia do „tła” podczas połączeń przychodzących.

Możliwe jest nawet sprawdzenie, czy dane mobilne są aktywne ( DATA_DISCONNECTEDpodczas robienia zrzutów ekranu korzystałem z Wi-Fi, jak widać na pasku powiadomień), w jakim kraju jesteś, dostawcy (w tym niektórych danych technicznych na jego temat), czy masz kartę SIM lub korzystasz z roamingu.

Stąd nie są dostępne tylko dane identyfikujące: IMEI, SIMID, IMSI i własny numer telefonu.

Wniosek: Zezwolenie to jest potrzebne tylko do celów identyfikacyjnych, nic więcej.

Dlaczego więc tak wiele aplikacji tego potrzebuje?

  • W przypadku modułów reklamowych najprawdopodobniej 1
  • Ponieważ deweloper myślał, że go potrzebuje (jak wskazano tutaj w niektórych odpowiedziach) 2
  • Ponieważ aplikacja jest przeznaczona (również) do uruchamiania na Androidzie 1.5 i nowszych (łatwo to sprawdzić, ponieważ jest to wymienione w Google Play ).

Prawdopodobieństwa w dokładnie tej kolejności, IMHO.


1 Uwaga posta Dana na czacie :

Zasady Google Play zabraniają teraz aplikacjom uzyskiwania identyfikatora IMEI do celów reklamowych. Wszystkie biblioteki reklam zostały zaktualizowane, aby używały „identyfikatora reklamowego” dostarczonego przez Google Play, więc wszelkie, które nadal używają IMEI w tym celu, powinny zostać zgłoszone Google.

Ponieważ użytkownikowi trudno jest powiedzieć, do czego aplikacja używa IMEI, należy najpierw poprosić programistę o wyjaśnienie.


2 Inny programista właśnie wskazał mi subtelną różnicę: chociaż pozwolenie nie jest potrzebne do odczytania aktualnego stanu połączenia (jak już wskazałem), może być konieczne zarejestrowanie słuchacza , aby otrzymywać powiadomienia o zmianach połączenia status (patrz: Wykrywanie przychodzących i wychodzących połączeń telefonicznych na Androidzie ). Chociaż wydaje się, że istnieją sposoby, aby poradzić sobie z tym automatycznie podczas wywoływania systemu onPause, może nie zawsze być odpowiednie: pomyśl o swoim budziku. Może nie być konieczne automatyczne zatrzymanie tego połączenia przychodzącego - szczególnie nie wtedy, gdy w profilu ustawiono „wyciszenie” głośności dzwonka.


3 Ponownie poprawka od Dana : Domyślne dodatkowe pozwolenie otrzymasz tylko wtedy, gdy „docelowa” wersja aplikacji to 1.5. Jeśli celujesz w późniejszą wersję, ale twoja minimalna wersja to 1.5, nie otrzymasz automatycznie dodanego pozwolenia.


Aktualizacje

  1. Ciekawe, że istnieje otwarty problem (21504) do podziału READ_PHONE_STATEna to, co jest potrzebne, aby a) wykryć połączenia przychodzące i powiązane (telefonia), a także drugie pozwolenie na dane identyfikacyjne (IMEI, IMSI itp.). Otwarty 11/2011, wciąż nie pracował. Oznacz to gwiazdką, jeśli jesteś zainteresowany
  2. I tak, istnieje sposób, aby osiągnąć ten sam (wykrywanie przychodzące) bez tej READ_PHONE_STATEzgody, jak np podkreślił Arno Welzel . Jak przychodzące połączenie telefoniczne spowodowałaby dzwonek, że zdarzenie może być stosowany z onAudioFocusChange(), który nie wymaga żadnego specjalnego pozwolenia: jeśli wywołany przez to, że aplikacja będzie mogła sprawdzić CallState (ponownie, bez specjalnego zezwolenia wymagane), aby zobaczyć, czy jest tam połączenie przychodzące.
Izzy
źródło
Myślę, że musisz usunąć tę część, w której twierdzisz, że żadna aplikacja nie potrzebuje tego uprawnienia do tła połączeń przychodzących. Podkreśliłeś już ten punkt w przypisie 2, ale jest to sprzeczne. Zobacz także developer.android.com/reference/android/telephony/…
Mikel
@Mikel Masz częściowo rację. Korzystanie z tego uprawnienia jest „najłatwiejszym” sposobem wykonania zadania, ale nie jedynym. Można to zrobić bez, jak zauważył jakiś programista (czy to na czacie? Niestety, zgubiłem link). Podobnie jak w przypadku wielu rzeczy, korzystanie z interfejsów API Google znacznie ułatwia niektóre czynności (jednocześnie wiąże twoją aplikację z eko-systemem Google). Nie jestem programistą, więc nie mogę powiedzieć, o ile więcej pracy oznaczałoby to w inny sposób.
Izzy
Nie jestem jeszcze deweloperem Androida i zgadzam się, że wygląda na to, że niektóre przypadki użycia są objęte funkcją onPause (). Samo powiedzenie, że „Żadna aplikacja nie potrzebuje tego pozwolenia”, wydaje mi się niewłaściwe. To brzmi bardziej jak „niektóre aplikacje mogą potrzebować tego uprawnienia”, np. Jeśli działają w tle. Należy również pamiętać, że odbiór zamiaru transmisji z pewnością musi być bardziej wydajny niż wielokrotne odpytywanie stanu telefonu.
Mikel
@Mikel Zobacz moją aktualizację. I tak, „wcale nie ma potrzeby” może być nieco przesadzone. Może w 0,5% wszystkich obecnych próśb może być rzeczywiście potrzebna, bez dostępnej alternatywy #D I tak ponownie: onPause()to było to, o czym rozmawialiśmy na czacie! Ale używanie onAudioFocusChange()może być nawet mniej kosztowne (wtedy małe sondowanie może być niezauważalne).
Izzy
10

Wielu wydawców reklam korzysta z tego uprawnienia, aby uzyskać identyfikator telefonu do wszelkiego rodzaju celów śledzenia. Istnieją inne sposoby uzyskania unikalnego identyfikatora, ale niestety są one wadliwe w starszych wersjach Androida (historia jest bardziej skomplikowana, patrz np. Https://stackoverflow.com/questions/2785485/is-there-a-unique-android- identyfikator urządzenia lub http://android-developers.blogspot.com/2011/03/identifying-app-installations.html, aby uzyskać pełniejszą historię).

Jeśli więc aplikacja korzysta z reklam, istnieje spora szansa, że ​​sama aplikacja nie potrzebuje uprawnienia READ_PHONE_STATE, tylko dostawca reklam.

Kasper Peeters
źródło
1
To właśnie jest główny problem IMHO! Dobrze wymyślony.
Izzy