Você copiou uma senha, abriu um site e viu um pedido para ler sua área de transferência. O que exatamente você entregaria ao clicar em Permitir? E, se nenhum aviso aparecer, isso significa que a página não consegue ler nada?
Há dois caminhos. Colar em uma página entrega a ela os dados envolvidos na colagem. Uma API separada do navegador consegue ler a área de transferência sem uma colagem, conforme as regras de acesso do navegador. Confundir as duas coisas leva tanto à resposta tranquilizadora e errada, “sites não podem ler sua área de transferência”, quanto à alarmista, “toda aba aberta vê suas senhas”.
Colar já é entregar os dados
Pressione Ctrl+V ou Command+V em um campo de texto e o navegador dispara um evento paste. Um listener pode chamar event.clipboardData.getData('text/plain') antes que o texto apareça no campo. Essa colagem iniciada pelo usuário não precisa de uma caixa de diálogo extra pedindo acesso à área de transferência. Você acabou de dizer ao navegador onde colocar os dados.
O evento se propaga pelo documento, então o listener não precisa estar naquele campo específico. A página também pode cancelar a inserção padrão. Ver a caixa vazia depois de colar não prova que a página não recebeu nada.
Experimente aqui. Selecione e copie o exemplo, depois cole na caixa vazia. A demonstração conta o texto e lista os formatos expostos pelo evento. Ela descarta o texto colado em vez de inseri-lo. Este componente não envia nem salva nada de nenhum dos dois testes.
Use este exemplo inofensivo. Selecione e copie o texto, depois experimente cada caminho abaixo. Copiar substitui o conteúdo atual da sua área de transferência.
bscan clipboard sample 123 Você cola na página
A página solicita uma leitura
Este botão solicita o texto atual da sua área de transferência. Copie apenas o exemplo antes de usá-lo. Seu navegador pode pedir permissão ou mostrar um menu para Colar.
Uma célula de planilha ou um parágrafo formatado pode fornecer mais do que texto simples. A área de transferência pode conter várias representações do mesmo item, como text/plain e text/html. A página pode receber os formatos que o navegador expõe naquela colagem, não apenas os caracteres que você esperava ver. Nossa demonstração lista os nomes dos formatos; ela não renderiza HTML colado nem abre arquivos colados.
Um site pode ler a área de transferência sem você colar?
Sim, quando o navegador permite uma leitura direta. navigator.clipboard.readText() solicita o texto atual da área de transferência. read() também pode solicitar formatos compatíveis que não sejam texto. Esses métodos fazem parte da Async Clipboard API, restrita a contextos seguros, como HTTPS. Uma conexão segura é um pré-requisito, não uma autorização geral para coletar seus dados.
Clique no botão de leitura da demonstração só depois de copiar o exemplo inofensivo. Ele faz uma solicitação real à API, então seu navegador pode exibir uma interface própria de permissão ou de Colar. A página informa se a solicitação funcionou e o comprimento do texto retornado. Ela não transforma uma recusa em um selo verde de “navegador seguro”: a recusa descreve essa solicitação, com esse estado de foco e essas permissões.
A especificação de Clipboard distingue uma colagem real feita pelo usuário de um script que dispara um evento chamado paste. Um script não consegue fabricar um evento de colagem confiável para liberar a área de transferência do sistema. É por isso que o primeiro teste precisa da sua ação de colar e o segundo precisa de uma leitura autorizada pelo navegador.
O Chrome pode lembrar a permissão; Safari e Firefox funcionam de outro jeito
Em navegadores Chromium, incluindo Chrome e Edge, um documento em foco pode solicitar a permissão clipboard-read. Se ela já tiver sido concedida, uma leitura que atenda aos requisitos pode funcionar sem outro aviso. “Não me perguntaram desta vez” não prova que o acesso nunca foi autorizado. Confira as permissões já concedidas ao site.
Firefox e Safari não implementam essa mesma permissão persistente clipboard-read. O caminho de leitura direta exige uma interação recente do usuário e pode apresentar uma opção temporária de Colar. A leitura de conteúdo copiado da mesma origem pode dispensar esse aviso. Por isso, testar apenas texto copiado na própria página de teste pode dar uma impressão enganosa do que acontece com texto copiado em outro aplicativo.
Para repetir o teste, digite uma frase inofensiva em um editor de texto local, copie de lá, volte aqui e solicite outra leitura. Compare a interface do navegador, não apenas o número final. A MDN documenta as diferenças entre os navegadores; o WebKit explica como projetou o acesso à área de transferência. Frames incorporados e políticas do navegador podem impor restrições adicionais, então teste no navegador que você realmente usa.
Um botão Copiar lê o que estava lá antes?
Não necessariamente. Um botão que usa navigator.clipboard.writeText() grava o texto da página na área de transferência. Esse método não retorna primeiro o conteúdo anterior. Leitura e gravação são operações separadas, com regras de acesso diferentes, como explica o guia de Async Clipboard do Google.
Uma página também pode tratar o evento copy, escolher o que vai para a área de transferência e cancelar a cópia padrão. A API do evento copy não entrega ao handler o conteúdo anterior da área de transferência. Mas ele pode ler o texto selecionado no próprio documento. Copiar uma frase de uma página é uma interação observável, como mostra nossa demonstração de troca de abas e atividade na página.
Isso também explica por que um botão Copiar não garante que o texto copiado corresponda ao texto visível. Confira os comandos colados antes de executá-los. O passo perigoso é executar o que chegou, não a existência de um botão Copiar.
Sites conseguem ver seu histórico da área de transferência?
A API Clipboard comum da web não tem um método para listar o histórico da área de transferência do sistema operacional. Uma leitura autorizada acessa o conteúdo atual, não um arquivo pesquisável de tudo que você copiou na semana passada. Gerenciadores de área de transferência, extensões de navegador e aplicativos nativos têm seus próprios modelos de acesso; não use o comportamento de um aplicativo de celular como prova do que uma página web comum pode fazer.
Esse limite não apaga os dados que você já entregou. Um site que recebeu texto pode guardar sua própria cópia. Substituir o conteúdo da área de transferência depois, fechar a aba ou redefinir a permissão não traz essa cópia de volta. Da mesma forma, o botão Limpar resultados acima limpa o que esta demonstração exibe; ele não limpa a área de transferência do sistema nem revoga uma permissão do navegador.
Feche o caminho de acesso que você realmente abriu
No Chrome para computador, abra Configurações, Privacidade e segurança, Configurações do site e procure Área de transferência. Confira os sites permitidos e remova os acessos de que não precisa mais. Você também pode abrir os controles do site atual ao lado da barra de endereços e consultar as configurações dele. O guia de permissões do Google documenta esses controles. Bloquear leituras diretas ainda não impede que uma página receba uma colagem que você envia de propósito.
No dia a dia, cole apenas em um destino ao qual você pretende entregar os dados. Use exemplos inofensivos ao verificar permissões. Se a dúvida é o que uma página descobre sem sua interação, compare este teste com o fingerprinting de fontes ou com a leitura do renderizador WebGL: são outras formas de coleta, e uma recusa de leitura da área de transferência não diz nada sobre elas.
Se você gerencia contas de clientes em perfis separados, uma ferramenta como o Incogniton pode ajudar a organizar esse trabalho. Ainda assim, trate cada colagem como uma transferência deliberada para a página que a recebe. Separar perfis não é motivo para colar um segredo de um cliente na conta errada.
Copie o exemplo, compare os dois resultados e depois revise qualquer permissão concedida durante o teste. Em seguida, use o scan completo para inspecionar os sinais do navegador que não dependem de uma colagem.