Os aplicativos do iPhone têm permissão para fazer chamadas sem a interação do usuário?

9

Agora eu estava lendo sobre um golpe de chamada não atendida, onde o usuário é cobrado, mesmo que não ligue de volta para o número. Ocorreu-me que um aplicativo malicioso do iPhone poderia fazer chamadas para números premium para enganar os usuários com dinheiro - na verdade, parece que isso aconteceu no passado.

De acordo com a documentação da Apple :

Quando um usuário toca em um link de telefone em uma página da Web, o iOS exibe um alerta perguntando se o usuário realmente deseja discar o número de telefone e inicia a discagem se o usuário aceita. Quando um usuário abre um URL com o esquema de tel em um aplicativo nativo, o iOS não exibe um alerta e inicia a discagem sem avisar o usuário.

Parece-me que um aplicativo para iPhone aparentemente benigno poderia, por exemplo, esperar até que o telefone fosse carregado (e, portanto, provavelmente não sendo atendido pelo usuário) e, em seguida, iniciar uma chamada para um número de tarifa premium para gerar um bônus de bônus ao desenvolvedor . Não parece haver nenhuma permissão no iOS que eu possa alterar para evitar esse comportamento, pois isso está abrindo o aplicativo de telefone com um URL em vez de acessar os dados do telefone.

Alguém pode confirmar se meu entendimento está correto e, se sim, por que diabos a Apple não fechou um buraco tão vazio?

Cartroo
fonte

Respostas:

8

Verifiquei experimentalmente o comportamento do iOS tentando iniciar uma ligação telefônica de um dos meus aplicativos.

Aqui estão os resultados:

  • É possível iniciar programaticamente uma ligação sem confirmação do usuário. Acabei de escrever uma única linha de código que é executada logo após o carregamento do aplicativo. Isso significa que, se o seu aplicativo estiver em primeiro plano, ele poderá iniciar uma chamada a qualquer momento, mesmo sem a necessidade de o usuário tocar em qualquer lugar.
  • Enviei uma notificação remota silenciosa por push ao aplicativo para ativá-lo, se não estiver em execução, e executar o mesmo código. Nenhuma chamada foi iniciada; O iOS não permite que um aplicativo inicie uma chamada telefônica se o aplicativo estiver sendo executado em segundo plano.

Portanto, respondendo às suas perguntas, a única maneira de iniciar uma ligação sem que o usuário perceba é convencer o usuário a deixar o aplicativo malicioso em execução em primeiro plano e iniciar a ligação, pois o iOS não permitirá essa operação. se o aplicativo estiver em segundo plano.

Atualmente, o iOS não fornece nenhum mecanismo para bloquear as chamadas telefônicas de um aplicativo específico, mas isso só pode acontecer se o aplicativo estiver em primeiro plano.

tomacco
fonte
Obrigado pela investigação abrangente, resposta brilhante. Fico feliz em saber que é apenas em primeiro plano, embora não consiga deixar de pensar que não é muito difícil inventar um aplicativo que provavelmente será deixado sem supervisão e em primeiro plano - o aplicativo da câmera que faz um lapso de tempo é um bom exemplo do tipo de coisa. Eu ainda preferiria que abrir URLs em outros aplicativos fosse uma permissão para o outro aplicativo aberto - apenas confirmado pela primeira vez por aplicativo externo, não sempre. Eu aceito que isso tenha implicações UX, no entanto. Eu acho que todo mundo só tem que estar vigilante.
Cartroo
5

Eu fiz um aplicativo de teste para verificar isso. O aplicativo pode abrir URLs, como tel://123456789somente quando estiver em primeiro plano e ativo. Quando eu chamo esse código, mesmo após entrar no estado de segundo plano, a API para abrir esse URL não fez nada. Portanto, para responder à sua pergunta, os aplicativos não poderão fazer uma ligação sem o seu conhecimento.

Para testar isso, cole no seu AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
}
Mateusz Szlosek
fonte
Ótima resposta, obrigado pelo código. Se eu pudesse aceitar as duas respostas, aceitaria.
Cartroo
2

Ao tentar iniciar uma chamada no iOS> = 10.3, um pop-up sempre será exibido para o usuário. Documentos

Vaiden
fonte