Skip to content

Esquemas de URL personalizados

Os esquemas de URL personalizados permitem que aplicativos se comuniquem através de um protocolo personalizado. Um aplicativo deve declarar suporte aos esquemas e tratar URLs recebidas que utilizem esses esquemas.

A Apple alerta sobre o uso inadequado de esquemas de URL personalizados na Documentação para Desenvolvedores da Apple:

Os esquemas de URL oferecem um vetor de ataque potencial para seu aplicativo, portanto, certifique-se de validar todos os parâmetros da URL e descartar quaisquer URLs malformadas. Além disso, limite as ações disponíveis àquelas que não coloquem em risco os dados do usuário. Por exemplo, não permita que outros aplicativos excluam conteúdo diretamente ou acessem informações sensíveis sobre o usuário. Ao testar seu código de tratamento de URL, inclua casos de teste com URLs formatadas incorretamente.

Eles também sugerem o uso de links universais (universal links) em vez disso, se o objetivo for implementar deep linking:

Embora os esquemas de URL personalizados sejam uma forma aceitável de deep linking, os links universais são fortemente recomendados como uma prática recomendada.

O suporte a um esquema de URL personalizado é feito através de:

  • definição do formato para as URLs do aplicativo,
  • registro do esquema para que o sistema direcione as URLs apropriadas para o aplicativo,
  • tratamento das URLs que o aplicativo recebe.

Problemas de segurança surgem quando um aplicativo processa chamadas para seu esquema de URL sem validar adequadamente a URL e seus parâmetros, e quando os usuários não são solicitados a confirmar antes de acionar uma ação importante.

Um exemplo é o seguinte bug no aplicativo Skype Mobile, descoberto em 2010: O aplicativo Skype registrou o manipulador de protocolo skype://, que permitia que outros aplicativos iniciassem chamadas para outros usuários do Skype e números telefônicos. Infelizmente, o Skype não pedia permissão aos usuários antes de realizar as chamadas, então qualquer aplicativo poderia chamar números arbitrários sem o conhecimento do usuário. Os atacantes exploravam esta vulnerabilidade colocando um <iframe src="skype://xxx?call"></iframe> invisível (onde xxx era substituído por um número premium), de modo que qualquer usuário do Skype que visitasse inadvertidamente um site malicioso ligava para o número premium.

Como desenvolvedor, você deve validar cuidadosamente qualquer URL antes de chamá-la. Você pode permitir apenas determinados aplicativos que podem ser abertos via manipulador de protocolo registrado. Solicitar que os usuários confirmem a ação acionada pela URL é outro controle útil.

Todas as URLs são passadas para o delegado do aplicativo, seja no momento da inicialização ou enquanto o aplicativo está em execução ou em segundo plano. Para tratar URLs recebidas, o delegado deve implementar métodos para:

  • recuperar informações sobre a URL e decidir se deseja abri-la,
  • abrir o recurso especificado pela URL.

Mais informações podem ser encontradas no Guia de Programação de Aplicativos para iOS arquivado e no Guia de Codificação Segura da Apple.

Além disso, um aplicativo também pode querer enviar solicitações de URL (também conhecidas como consultas) para outros aplicativos. Isso é feito através de:

  • registro dos esquemas de consulta de aplicativos que o aplicativo deseja consultar,
  • opcionalmente consultar outros aplicativos para saber se eles podem abrir uma determinada URL,
  • envio das solicitações de URL.