Czy aplikacje na iPhone'a mają uprawnienia do wykonywania połączeń bez interakcji użytkownika?

9

Czytałem o oszustwie z powodu nieodebranego połączenia, w którym użytkownik jest obciążany, nawet jeśli nie oddzwoni na ten numer. Przyszło mi do głowy, że złośliwa aplikacja na iPhone'a może nawiązywać połączenia z numerami premium w celu oszukania użytkowników za pieniądze - w rzeczywistości wygląda na to, że zdarzyło się to w przeszłości.

Według własnej dokumentacji Apple :

Gdy użytkownik stuknie łącze telefoniczne na stronie internetowej, iOS wyświetla alert z pytaniem, czy użytkownik naprawdę chce wybrać numer telefonu i inicjuje wybieranie numeru, jeśli użytkownik zaakceptuje. Gdy użytkownik otwiera adres URL za pomocą schematu tel w natywnej aplikacji, iOS nie wyświetla ostrzeżenia i inicjuje wybieranie numeru bez dalszego monitowania użytkownika.

Wydaje mi się, że pozornie łagodna aplikacja na iPhone'a mogłaby, powiedzmy, poczekać, aż telefon pozostanie naładowany (a zatem prawdopodobnie nie będzie obecny przez użytkownika), a następnie zainicjować połączenie na numer o podwyższonej opłacie, aby uzyskać od programisty porządny bonus . Wygląda na to, że w systemie iOS nie ma żadnych uprawnień, które mogę zmienić, aby zapobiec takiemu zachowaniu, ponieważ powoduje to otwarcie aplikacji na telefon z adresem URL, a nie uzyskiwanie dostępu do danych telefonu.

Czy ktoś może potwierdzić, czy moje rozumowanie jest prawidłowe, a jeśli tak, to dlaczego, do licha, Apple nie zamknął tak otwartej dziury?

Cartroo
źródło

Odpowiedzi:

8

Eksperymentalnie sprawdziłem zachowanie iOS, próbując nawiązać połączenie telefoniczne z jednej z moich aplikacji.

Oto wyniki:

  • Możliwe jest programowe rozpoczęcie połączenia telefonicznego bez potwierdzenia użytkownika. Właśnie napisałem jeden wiersz kodu, który jest wykonywany zaraz po załadowaniu aplikacji. Oznacza to, że jeśli aplikacja znajduje się na pierwszym planie, może rozpocząć połączenie w dowolnym momencie, nawet bez konieczności dotykania przez użytkownika w dowolnym miejscu.
  • Wysłałem ciche powiadomienie zdalne push do aplikacji, aby ją obudzić, jeśli nie jest uruchomiona, a następnie wykonać ten sam kod. Żadne połączenie nie zostało rozpoczęte; iOS nie zezwala aplikacji na inicjowanie połączenia telefonicznego, jeśli aplikacja działa w tle.

Odpowiadając na pytania, jedynym sposobem na rozpoczęcie rozmowy telefonicznej bez zauważenia jej przez użytkownika jest przekonanie użytkownika, aby pozostawił złośliwą aplikację działającą na pierwszym planie, a następnie rozpoczęcie rozmowy telefonicznej, ponieważ iOS nie zezwala na tę operację jeśli aplikacja jest w tle.

Obecnie iOS nie zapewnia żadnego mechanizmu blokującego rozpoczynanie połączeń telefonicznych z określonej aplikacji, ale może się to zdarzyć tylko wtedy, gdy aplikacja jest na pierwszym planie.

tomacco
źródło
Dzięki za wszechstronne dochodzenie, świetna odpowiedź. Cieszę się, że słyszę to tylko na pierwszym planie, choć nie mogę się powstrzymać, ale nie jest trudno wymyślić aplikację, która prawdopodobnie pozostanie bez opieki, a na pierwszym planie - aplikacja aparatu robi upływ czasu dobry przykład tego rodzaju rzeczy. Nadal wolałbym, aby otwieranie adresów URL w innych aplikacjach było zezwoleniem na otwarcie każdej innej aplikacji - właśnie potwierdzone za pierwszym razem dla aplikacji zewnętrznej, nie za każdym razem. Zgadzam się jednak, że ma to wpływ na UX. Chyba wszyscy muszą być czujni.
Cartroo 30.04.16
5

Zrobiłem aplikację testową, aby to sprawdzić. Aplikacja może otwierać adres URL, na przykład tel://123456789tylko wtedy, gdy jest na pierwszym planie i aktywna. Kiedy wywołuję ten kod, nawet tuż po przejściu w stan tła, interfejs API do otwarcia tego adresu URL nic nie zrobił. Aby odpowiedzieć na twoje pytanie - aplikacje nie będą mogły nawiązać połączenia bez Twojej wiedzy.

Aby przetestować tę wklej to w AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
}
Mateusz Szlosek
źródło
Świetna odpowiedź, dziękuję za kod. Gdybym mógł zaakceptować obie odpowiedzi, zrobiłbym to.
Cartroo 30.04.16
2

Podczas próby nawiązania połączenia w systemie iOS> = 10,3, użytkownik zawsze wyświetla wyskakujące okienko. Dokumenty

Vaiden
źródło