Les applications iPhone sont-elles autorisées à passer des appels sans interaction avec l'utilisateur?

9

Je lisais une escroquerie d'appel manqué tout à l'heure où l'utilisateur est facturé même s'il ne rappelle pas le numéro. Il m'est venu à l'esprit qu'une application iPhone malveillante pouvait appeler des numéros premium pour escroquer des utilisateurs d'argent - en fait, il semble que cela se soit produit dans le passé.

Selon la propre documentation d'Apple :

Lorsqu'un utilisateur appuie sur un lien téléphonique dans une page Web, iOS affiche une alerte lui demandant si l'utilisateur souhaite vraiment composer le numéro de téléphone et lance la numérotation s'il accepte. Lorsqu'un utilisateur ouvre une URL avec le schéma tel dans une application native, iOS n'affiche pas d'alerte et lance la numérotation sans demander à l'utilisateur.

Il me semble qu'une application iPhone apparemment bénigne pourrait, par exemple, attendre que le téléphone soit laissé en charge (et donc probablement pas assisté par l'utilisateur), puis lancer un appel vers un numéro surtaxé pour payer au développeur un bon bonus . Il ne semble pas y avoir d'autorisation dans iOS que je peux modifier pour empêcher ce comportement, car cela ouvre l'application du téléphone avec une URL plutôt que d'accéder aux données du téléphone.

Quelqu'un peut-il confirmer si ma compréhension est correcte et, si oui, pourquoi diable Apple n'a-t-il pas fermé un trou aussi béant?

Cartroo
la source

Réponses:

8

J'ai vérifié expérimentalement le comportement d'iOS en essayant de lancer un appel téléphonique à partir de l'une de mes applications.

Voici les résultats:

  • Il est possible de démarrer un appel téléphonique par programmation sans confirmation de l'utilisateur. Je viens d'écrire une seule ligne de code qui est exécutée juste après le chargement de l'application. Cela signifie que si votre application est au premier plan, elle peut lancer un appel à tout moment, même sans que l'utilisateur ait besoin d'appuyer n'importe où.
  • J'ai envoyé une notification push distante silencieuse à l'application afin de la réactiver si elle ne fonctionne pas, puis d'exécuter le même code. Aucun appel n'a été lancé; iOS ne permet pas à une application de lancer un appel téléphonique si l'application s'exécute en arrière-plan.

Donc, répondre à vos questions, la seule façon de démarrer un appel téléphonique sans que l'utilisateur ne s'en rende compte, est en quelque sorte de convaincre l'utilisateur de laisser l'application malveillante en cours d'exécution au premier plan, puis de lancer l'appel téléphonique, car iOS ne permettra pas cette opération si l'application est en arrière-plan.

Actuellement, iOS ne fournit aucun mécanisme pour bloquer le démarrage d'appels téléphoniques à partir d'une application particulière, mais cela ne peut se produire que si l'application est au premier plan.

Tomacco
la source
Merci pour l'enquête approfondie, réponse brillante. Je suis content d'apprendre que ce n'est qu'au premier plan, même si je ne peux m'empêcher de penser qu'il n'est pas trop difficile d'inventer une application qui sera probablement laissée sans surveillance et au premier plan - l'application appareil photo faisant un time-lapse est un bon exemple du type de chose. Je préfère toujours que l'ouverture d'URL dans d'autres applications soit une autorisation pour chaque autre application ouverte - vient de confirmer la première fois par application externe, pas à chaque fois. J'accepte cependant que cela ait des implications UX. Je suppose que tout le monde doit juste être vigilant.
Cartroo
5

J'ai fait une application de test pour vérifier cela. L'application peut ouvrir une URL, par exemple tel://123456789uniquement lorsqu'elle est au premier plan et active. Lorsque j'appelle ce code même juste après avoir entré l'état d'arrière-plan, l'API pour ouvrir cette URL n'a rien fait. Donc, pour répondre à votre question, les applications ne pourront pas passer un appel à votre insu.

Pour tester cela, collez ceci dans votre AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
}
Mateusz Szlosek
la source
Excellente réponse, merci pour le code. Si je pouvais accepter les deux réponses, je le ferais.
Cartroo
2

Lorsque vous essayez de lancer un appel sur iOS> = 10.3, une fenêtre contextuelle sera toujours affichée pour l'utilisateur. Documents

Vaiden
la source