Em Produção · Frontend · Backend

Rodar código no site dos outros

Já construí um script que vivia dentro do site dos nossos clientes. O mecanismo que te rastreia pela internet é o mesmo; o que muda é a responsabilidade.

Por Publicado em 7 min de leitura1 figura interativa

Na Social Miner, construí e mantive o URSA: um script que nossos clientes embutiam por um pixel, do jeito que se embute o Google Tag Manager. Ele rodava num ambiente hostil, dentro do sandbox do navegador em sites que não eram nossos e que não dava para testar antes. As partes onsite e offsite conversavam por postMessage, com um pequeno pub/sub por cima. Eventos de comportamento iam em lote para o IndexedDB e eram enviados por um service worker, para nada se perder quando alguém fechava a aba. O URSA também capturava a permissão de push, e foi isso que viabilizou nosso produto de Push Notification. Liderei um time de quatro pessoas nele e no Channel Builder, feito com .NET e React.

Código na página dos outros enxerga muita coisa. Para entender quanto, imagine uma empresa grande, a MOZART, que quer reconhecer a mesma pessoa em qualquer lugar da internet sem nunca saber quem ela é. Ela define a pessoa como um conjunto de ações: visitou a página do Palmeiras no globoesporte às 18h30, depois o site do governo de São Paulo às 18h35. Daí deduz: torce pro Palmeiras, mora em São Paulo, tem tempo livre perto das 18h30. Para costurar as visitas bastam dois headers HTTP. O referer diz de onde veio a requisição. Um cookie, mozart.id, identifica o navegador. Qualquer site que carregue mozart.com/external.png entrega os dois.

Fig. 1 — Um pixel, três sitessimulação · nenhuma requisição real

Carregando a figura interativa…

Versão estática: com cookie de terceiros e referer completo, três visitas viram “torce pro Palmeiras, mora em São Paulo, tem tempo livre perto das 18h30”.

Um pixel basta

Visite os três sites com tudo liberado e veja o perfil se montar. Depois bloqueie cookies de terceiros: cada requisição chega anônima e as visitas deixam de se ligar. Corte o referer para a origem e o “Palmeiras” some, porque o caminho da página não viaja mais. Os navegadores foram para esse lado, limitando cookies de terceiros e cortando o referer entre sites por padrão.

Para código embutido de boa-fé isso não é obstáculo. É o contrato. Todo widget, SDK e chat embutido é visita na casa de outra pessoa, e uma boa visita:

  • fica isolada, num iframe ou em Shadow DOM, sem variáveis globais e sem CSS vazando;
  • depende só do que foi oferecido, presume que não há cookies de terceiros e que o referer vem cortado, e pede qualquer outra coisa de forma explícita;
  • tem orçamento de peso e de falha, para que, quando quebrar, a página do anfitrião continue de pé.

Uma imagem de um por um já bastou para descobrir um time, uma cidade e um horário. O que você faz com o que chega é toda a diferença.