voltar à visão geral Mais artigos

Sites Veem Você Trocar de Aba, Copiar ou Tirar Print?

Questionável
Experimente: troque de aba e depois copie uma frase

Tudo abaixo acontece no seu próprio navegador, agora mesmo. Troque de aba, destaque e copie uma frase, ou abra esta página duas vezes. Nada sai do seu dispositivo.

Últimos eventos registrados pela página

  • nada ainda

Eventos de que a página é informada

  • Troca de aba ou janela minimizada aguardando
    troque para outra aba e volte
  • Janela perdeu o foco aguardando
    clique em outro app ou janela
  • Cursor saiu da página aguardando
    tire o ponteiro de dentro da janela
  • Texto destacado aguardando
    destaque qualquer texto desta página
  • Copiar ou recortar aguardando
    pressione Ctrl+C ou Cmd+C no texto destacado
  • Colar aguardando
    cole algo na caixa abaixo
  • Diálogo de impressão aguardando
    pressione Ctrl+P e depois cancele
  • Tecla PrintScreen aguardando
    pressione PrintScreen (teclados de Windows)
  • Outras abas deste site aguardando
    abra esta página em uma segunda aba

digitado: 0 · colado: 0

O que nenhum evento informa

  • Captura de tela com uma ferramenta do sistema invisível
  • Gravação de tela invisível
  • URLs e títulos das suas outras abas invisível
  • Para qual app você foi invisível

Os eventos são contados na memória e somem quando você fecha a aba. O texto colado é mostrado só para você.

Sim, um site consegue ver quando você troca de aba, e também quando você copia ou cola. Não, ele não consegue ver um print, uma gravação de tela nem o que está nas suas outras abas. As duas metades dessa resposta são verdadeiras, e é por isso que todo tópico de fórum sobre o assunto tem uma resposta confiante no topo, seguida de outra igualmente confiante dizendo o contrário.

O widget desta página é um detector de troca de aba funcionando de verdade, e é a forma mais rápida de resolver a discussão no seu próprio navegador. Troque para outra aba, destaque e copie uma frase, aperte Ctrl+P e cancele, e depois leia o que ele registrou.

Versão resumida: uma página fica sabendo quando é ocultada ou perde o foco, quando você destaca, copia, recorta, cola ou imprime, e quando o cursor sai da janela. Ela não fica sabendo de prints, de gravações de tela, de quais outros sites você tem abertos nem de para qual app você foi. Quando algo parece pegar um print, na verdade está lendo uma tecla pressionada ou uma mudança de foco, ou nem é uma página web.

Um site percebe quando você troca de aba?

Sim. Quando uma página é ocultada ou exibida de novo, o navegador dispara um evento visibilitychange e alterna document.visibilityState entre visible e hidden. Um evento blur separado dispara na janela quando ela perde o foco. Os dois vêm com um timestamp, então a página sabe que você saiu e por quanto tempo. Scripts de analytics se apoiam nisso: uma aba oculta pode nunca mais voltar, então esse é o momento em que eles enviam o que coletaram com navigator.sendBeacon. Plataformas de prova usam os mesmos sinais. Nos Classic Quizzes com a auditoria do log do quiz ativada, o Canvas registra quando a página do quiz de um aluno perde e recupera o foco.

O que a página não recebe é um destino. Saia da aba no widget e volte, e o log mostra por quanto tempo você ficou fora e nada além disso. Os dois eventos também medem coisas diferentes:

Quatro formas de desviar o olhar
  • Trocar para outra aba
    Aba oculta: informado Foco perdido: informado
  • Minimizar a janela
    Aba oculta: informado Foco perdido: informado
  • Clicar em outro app com o navegador ainda na tela
    Aba oculta: silencioso Foco perdido: informado
  • Pegar o celular
    Aba oculta: silencioso Foco perdido: silencioso
"Aba oculta" e "foco perdido" são sinais separados, então uma página distingue uma aba oculta de uma janela que só perdeu o foco (no Mac, um navegador totalmente coberto por outra janela também pode contar como oculto). Ela nunca descobre para onde você foi, e não enxerga o seu celular de jeito nenhum.

Clique em uma janela de chat com o navegador ainda na tela e só o blur dispara, porque a aba continua visível. Troque de aba e os dois disparam. É assim que um site distingue uma aba oculta de uma janela que apenas perdeu o foco. O movimento do cursor é um evento à parte: o mouseleave dispara quando o ponteiro sai da janela, e é o que os popups de intenção de saída usam para pegar você a caminho da barra de abas.

Bots tendem a mostrar o padrão oposto. Navegadores automatizados muitas vezes nunca recebem eventos de foco, ou reportam uma página que está sempre em foco, e o monitor de comportamento ao vivo da nossa página inicial acompanha esse padrão. É o tipo de sinal que a pontuação comportamental pode pesar, a mesma pontuação por trás dos CAPTCHAs que não param de aparecer para você.

Um site consegue ver as suas outras abas?

Só as dele. Uma página não consegue listar suas abas, ler os títulos ou URLs delas, nem olhar dentro delas. A política de mesma origem isola os sites uns dos outros, e nenhuma API web enumera abas. O que uma página consegue é conversar com outras abas da mesma origem no mesmo perfil de navegador, por meio de um BroadcastChannel ou de eventos de armazenamento. É assim que um app percebe que você o abriu duas vezes e pergunta qual das duas manter. Abra esta página em uma segunda aba e a linha “Outras abas deste site” a conta.

A única coisa que uma página fica sabendo sobre sua navegação anterior é de onde você veio. Se você seguiu um link, document.referrer informa o site em que o link estava, e geralmente só o nome do site, não o endereço completo.

Um site vê o que você copia e cola?

Sim, com limites. Os eventos copy e cut disparam no documento quando você aperta Ctrl+C ou usa o menu, e um handler consegue ler exatamente o que estava selecionado. Ele também pode substituir o que foi copiado por outro texto, e é assim que alguns sites acrescentam “Leia mais em…” a tudo o que você copia, uma gentileza que ninguém pediu. O selectionchange dispara enquanto você arrasta o cursor sobre o texto, então a página sabe o que você destacou antes mesmo de você copiar qualquer coisa.

Colar funciona no sentido contrário. Colar na página dispara paste e entrega o texto da área de transferência, e o beforeinput informa se o texto foi digitado ou colado, de modo que um formulário percebe que a sua resposta de 400 palavras chegou de uma vez só. O que uma página não consegue é vasculhar a sua área de transferência. navigator.clipboard.readText() exige a sua permissão e uma página que você esteja usando ativamente, então o texto que você copiou em outro app continua privado até você colá-lo em algum lugar.

É disso que as pessoas mais perguntam quando se trata de texto colado do ChatGPT. A página vê que uma colagem aconteceu e quanto texto chegou. Ela não fica sabendo de qual app ou site você copiou, embora a formatação de rich text às vezes possa dar uma pista.

Um site percebe se você tira print ou grava a tela?

Não. Nenhuma API de navegador informa um print ou uma gravação da sua tela. Quem faz isso é o sistema operacional, fora do navegador, e nada é enviado à página, seja a ferramenta o OBS, a Ferramenta de Recorte ou os botões laterais do seu celular. O que parece detecção de print é uma entre três outras coisas, e a última nem é detecção:

  • Um listener de teclado esperando pela PrintScreen. O widget mostra a peculiaridade: no Windows, a página normalmente recebe só o evento de tecla solta (keyup). No Mac, o sistema engole o atalho Cmd+Shift+4, então a página nunca o vê inteiro.
  • Um listener de beforeprint. Ele dispara com Ctrl+P e em “salvar como PDF”, então a página de fato percebe esse tipo de cópia.
  • Captura bloqueada. Serviços de streaming costumam mostrar um retângulo preto nos prints porque o vídeo trafega por um caminho protegido. Isso impede a captura sem detectá-la. Nosso post sobre o Widevine DRM explica como esses níveis de proteção funcionam.

Nos celulares, os eventos do navegador são os mesmos: uma página é ocultada quando você troca de app ou bloqueia a tela. A ideia de que os sites sabem dos prints provavelmente vem dos apps nativos. O iOS avisa um app quando você tira um print, e o Android tem um callback oficial de captura de tela para apps desde o Android 14, o que permite a um app de chat avisar a outra pessoa. Uma página web em um navegador de celular não é avisada de nada.

O Canvas ou uma prova online percebe que você trocou de aba?

Ele vê a perda de foco, com timestamps, e mostra ao professor que você saiu. Não vê para onde você foi. Esse é todo o mecanismo de um quiz que roda como página web, e é por isso que os relatórios costumam dizer “saiu da página” e nada mais específico.

Provas com supervisão são outra classe de software, e é ali que as afirmações ficam mais fortes:

Quem pode ver o quê
  • Que você trocou de aba ou de janela
    Página web: SimExtensão: SimApp nativo: Em parte
  • Quais outros sites você tem abertos
    Página web: NãoExtensão: SimApp nativo: Em parte
  • O que está na sua área de transferência
    Página web: Em parteExtensão: SimApp nativo: Sim
  • Que você tirou uma captura de tela
    Página web: NãoExtensão: NãoApp nativo: Em parte
  • Que você está gravando a tela
    Página web: NãoExtensão: NãoApp nativo: Em parte
Softwares de prova e alguns apps veem mais porque não são páginas web: rodam com permissões que um navegador nunca entrega a um site. "Em parte" significa que há um porém. Uma página precisa de um pedido de permissão para ler a área de transferência, um app nativo vê mudanças de janela mas não as abas do navegador, e celulares avisam os apps sobre capturas de tela enquanto desktops, na maioria, não.

O Respondus LockDown Browser é um programa instalado, e o Proctorio é uma extensão de navegador com permissão para ler as suas abas. Nenhum dos dois está limitado ao que uma página web consegue fazer. Se uma prova parece saber mais do que uma página poderia, olhe o que ela pediu para você instalar.

Dá para impedir que um site veja isso?

Não sem quebrar a página, e o contorno mais comum deixa a sua própria marca. Ferramentas que falsificam esses eventos funcionam substituindo funções nativas como o getter de document.hidden, e uma função nativa substituída se entrega do mesmo jeito que os patches de stealth na detecção de bots. Então o conselho realista é curto:

  1. Parta do princípio de que a página vê eventos de foco, visibilidade e área de transferência. Não tente suprimi-los. Usuários reais produzem os mesmos eventos, e falsificá-los é um indício por si só.
  2. Limpe a área de transferência antes de colar em um site. Uma colagem entrega à página o texto inteiro da área de transferência, então se você copiou uma senha ou uma frase de recuperação um minuto atrás, copie algo inofensivo por cima primeiro.
  3. Trate uma troca de aba como indício fraco. Ela diz que você desviou o olhar, que é o que as pessoas fazem o dia inteiro. Um site de quiz ou de prova que a penaliza está chutando a intenção.

Se você gerencia várias contas, troca de janela o dia todo, e a página de cada perfil registra cada troca. Isso não tem problema. O que faz contas serem marcadas é a contradição em outros pontos, como um perfil cujo idioma, relógio e GPU não batem entre si. O Incogniton dá a cada perfil o próprio navegador coerente, para que as suas trocas de janela pareçam o ruído comum que são. Se uma plataforma permite várias contas ou não depende das regras dela, então conheça-as antes de agir.

Quer ver o que mais uma página consegue ler sem pedir? O scan completo do navegador cobre o lado da rede, do hardware e do fingerprint.

Logotipo da Incogniton

Eleve o nível da sua privacidade

Seta