>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
TypeScript

Como identificar um usuário sem cookies e registro

Imagine uma situação: um usuário visita seu site em modo anônimo, limpa o cache, muda seu IP via proxy, mas você ainda precisa descobrir que é a mesma pessoa. Por quê? Por exemplo, para evitar que um atacante fique fazendo brute-force de senhas indefinidamente ou para não mostrar um desconto de boas-vindas pela décima vez para o mesmo "novo" cliente.

Métodos tradicionais como LocalStorage ou Cookies falham aqui — eles podem ser apagados com um único clique. É exatamente esse problema que o FingerprintJS resolve. É uma biblioteca que coleta dezenas de sinais indiretos do navegador e do dispositivo para criar um identificador único de visitante.

FingerprintJS logo

O que é e como funciona

FingerprintJS é uma ferramenta open-source para fingerprinting de navegador. Simplificando, a biblioteca consulta o navegador: "Quais fontes você tem instaladas? Qual é a resolução da sua tela? Como você renderiza gráficos através do Canvas?"

Individualmente, esses dados não significam muito. Milhões de pessoas usam o Chrome no Windows com resolução de 1920x1080. Mas quando você combina a versão do motor, lista de idiomas disponíveis, fuso horário, parâmetros da stack de áudio e características específicas de renderização de fontes, você obtém uma combinação que é única para quase todos os dispositivos. Todos esses dados são transformados em hash, e você obtém uma string curta — visitorId.

Como configurar um projeto rapidamente

A integração é extremamente amigável para desenvolvedores. Você pode instalar via npm:

npm install @fingerprintjs/fingerprintjs

E iniciar em apenas algumas linhas de código:

import FingerprintJS from '@fingerprintjs/fingerprintjs'

async function initFingerprint() {
  // Инициализируем агент при запуске приложения
  const fpPromise = FingerprintJS.load()
  
  const fp = await fpPromise
  const result = await fp.get()

  // Вот он, наш уникальный ID
  console.log(result.visitorId)
}

initFingerprint()

Se você não quer lidar com bundlers, a biblioteca está disponível via CDN. Mas há um porém: alguns bloqueadores de anúncios agressivos ou navegadores como o Brave podem bloquear o carregamento de scripts de domínios externos. Nesses casos, os autores recomendam usar o pacote npm e fazer o bundle do código no seu próprio bundle.

Onde isso realmente será útil

Na minha experiência, essas ferramentas aparecem com mais frequência em tarefas de segurança e análise.

Primeiro, prevenção de fraudes. Se alguém tentar registrar 50 contas para aumentar bônus de indicação, o FingerprintJS destacará que todas essas "diferentes" pessoas estão sentadas atrás do mesmo laptop.

Segundo, restrição de acesso. Você pode limitar o número de visualizações gratuitas de conteúdo (como grandes portais de notícias fazem) sem forçar o usuário a fazer login.

Terceiro, proteção contra brute-force de senhas. Se tentativas de login de um dispositivo estão usando nomes de usuário diferentes, essa é uma razão para bloquear o acesso para aquele "fingerprint" específico sem afetar outros usuários no mesmo IP (por exemplo, em um prédio de escritórios).

O que você deve saber antecipadamente

A biblioteca é ótima, mas não é uma "bala de prata". A versão open-source tem suas limitações, que os desenvolvedores escrevem honestamente no README.

A precisão da versão gratuita é menor que o produto comercial em nuvem deles. Como todos os cálculos acontecem no lado do cliente, um usuário avançado pode falsificar alguns parâmetros do navegador para mudar seu ID.

Além disso, se um usuário atualizar seu navegador ou sistema operacional, seu fingerprint provavelmente mudará. Não é um identificador permanente, mas sim um marcador temporário muito confiável.

FingerprintJS é uma excelente escolha se você precisa adicionar uma camada de segurança ou análise básica sem usar cookies. O projeto é ativo, tem uma enorme comunidade (quase 28 mil estrelas no GitHub) e documentação clara.

É a escolha certa para você? Se o objetivo é filtrar 90% dos bots e fraudadores amadores, então com certeza sim. Para sistemas bancários com requisitos críticos de segurança, você pode precisar olhar as soluções pagas deles com validação no servidor, mas para a maioria dos projetos web, as capacidades da versão MIT são mais do que suficientes.

Você pode testar a biblioteca em ação na página de demonstração deles — abra no modo normal, depois no modo anônimo, e você verá que a mágica funciona.

Projetos relacionados