MASTG-KNOW-0083: Pasteboard

Usando a API UIPasteboard, os aplicativos podem acessar a área de transferência do iOS, permitindo que compartilhem dados dentro do próprio aplicativo ou entre aplicativos. No entanto, a natureza global da área de transferência geral levanta preocupações de privacidade e segurança, especialmente quando dados sensíveis são copiados de forma programática sem interação do usuário.

Existem dois tipos de áreas de transferência:

  • Área de transferência geral (UIPasteboard.general): Compartilhada entre todos os aplicativos em primeiro plano e, com a Universal Clipboard, potencialmente entre dispositivos Apple. Ela é persistente por padrão entre reinicializações do dispositivo e reinstalações de aplicativos, a menos que seja limpa. A partir do iOS 16, a área de transferência geral exige interação do usuário para acesso.
  • Áreas de transferência personalizadas ou nomeadas (UIPasteboard(name:create:) e UIPasteboard.withUniqueName()): Essas são áreas de transferência privadas específicas do aplicativo ou da equipe, ou seja, restritas ao aplicativo que as criou ou a outros aplicativos do mesmo team ID. Elas são não persistentes por padrão desde o iOS 10 (excluídas ao término do aplicativo e reinicialização do sistema). A Apple desencoraja o uso de áreas de transferência personalizadas persistentes e recomenda usar App Groups para compartilhar dados entre aplicativos do mesmo desenvolvedor.

A API de área de transferência do iOS passou por várias mudanças que podem impactar a privacidade e a segurança do usuário:

  • Desde o iOS 9, o acesso à área de transferência foi restrito a aplicativos em execução em primeiro plano, o que reduz significativamente o risco de espionagem passiva da área de transferência. No entanto, se dados sensíveis permanecerem na área de transferência e um aplicativo malicioso for trazido para primeiro plano posteriormente (ou um widget de aplicativo que permanece em primeiro plano sempre que o usuário está na tela onde ele está localizado), o aplicativo pode acessar esses dados sem o consentimento ou conhecimento do usuário. Veja o exemplo de ataque.
  • Desde o iOS 10, a Universal Clipboard é habilitada por padrão e, quando um usuário faz login no iCloud, sincroniza automaticamente o conteúdo da área de transferência geral entre os dispositivos Apple próximos usando a mesma conta iCloud. Os desenvolvedores podem optar por desativar isso restringindo o conteúdo da área de transferência geral ao dispositivo local usando UIPasteboard.localOnly. Além disso, eles podem definir tempos de expiração para itens da área de transferência usando UIPasteboard.expirationDate.
  • Desde o iOS 14, o sistema notifica o usuário quando um aplicativo lê o conteúdo da área de transferência geral que foi gravado por um aplicativo diferente sem intenção do usuário. O sistema determina a intenção do usuário com base em interações, como tocar em um botão fornecido pelo sistema ou selecionar Colar no menu contextual.
  • Desde o iOS 16, o sistema solicita aos usuários com uma caixa de diálogo de confirmação de colagem sempre que um aplicativo acessa o conteúdo da área de transferência. Portanto, qualquer acesso à área de transferência geral deve ser explicitamente acionado por interação do usuário. Os aplicativos também podem usar UIPasteControl para lidar com ações de colagem, apresentando um botão especial "colar" sempre que detectam dados compatíveis. Isso não é necessariamente melhor ou mais seguro; é uma melhoria na experiência do usuário. Evita solicitar o usuário todas as vezes, mas o usuário ainda precisa clicar, então o acesso ocorre apenas em resposta à interação do usuário.