>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
TypeScript

Cómo identificar a un usuario sin cookies ni registro

Imagina una situación: un usuario visita tu sitio en modo incógnito, borra la caché, cambia su IP mediante un proxy, pero tú necesitas saber que es la misma persona. ¿Por qué? Por ejemplo, para evitar que un atacante realice ataques de fuerza bruta en contraseñas indefinidamente o para no mostrar un descuento de bienvenida por décima vez al mismo «nuevo» cliente.

Los métodos tradicionales como LocalStorage o Cookies fallan aquí: se pueden borrar con un solo clic. Este es exactamente el problema que resuelve FingerprintJS. Es una biblioteca que recopila docenas de señales indirectas del navegador y del dispositivo para crear un identificador único de visitante.

FingerprintJS logo

Qué es y cómo funciona

FingerprintJS es una herramienta de código abierto para fingerprinting del navegador. En términos simples, la biblioteca consulta al navegador: «¿Qué fuentes tienes instaladas? ¿Cuál es tu resolución de pantalla? ¿Cómo renderizas los gráficos a través de Canvas?»

Individual, estos datos no significan mucho. Millones de personas usan Chrome en Windows con una resolución de 1920x1080. Pero cuando combinas la versión del motor, la lista de idiomas disponibles, la zona horaria, los parámetros de la pila de audio y las características específicas de renderizado de fuentes, obtienes una combinación que es única para casi cada dispositivo. Todos estos datos se procesan con hash y obtienes una cadena corta: visitorId.

Cómo configurar un proyecto rápidamente

La integración es extremadamente amigable para desarrolladores. Puedes instalar mediante npm:

npm install @fingerprintjs/fingerprintjs

Y запустить всего в несколько строк кода:

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()

Si no quieres lidiar con bundlers, la biblioteca está disponible a través de CDN. Pero hay un detalle: algunos bloqueadores de anuncios agresivos o navegadores como Brave pueden bloquear la carga de scripts desde dominios externos. En tales casos, los autores recomiendan usar el paquete npm y agrupar el código en tu propio bundle.

Dónde realmente será útil

En mi experiencia, estas herramientas aparecen más frecuentemente en tareas de seguridad y análisis.

Primero, la prevención de fraude. Si alguien intenta registrar 50 cuentas para aumentar los bonos de referido, FingerprintJS destacará que todas estas «diferentes» personas están detrás del mismo portátil.

Segundo, la restricción de acceso. Puedes limitar el número de vistas gratuitas de contenido (como hacen los grandes medios de comunicación) sin obligar al usuario a iniciar sesión.

Tercero, la protección contra ataques de fuerza bruta en contraseñas. Si los intentos de inicio de sesión desde un dispositivo están usando diferentes nombres de usuario, eso es motivo para bloquear el acceso para ese «fingerprint» específico sin afectar a otros usuarios en la misma IP (por ejemplo, en un edificio de oficinas).

Lo que debes saber de antemano

La biblioteca es excelente, pero no es una «bala de plata». La versión de código abierto tiene sus limitaciones, que los desarrolladores indican honestamente en el README.

La precisión de la versión gratuita es menor que la de su producto comercial en la nube. Dado que todos los cálculos ocurren del lado del cliente, un usuario avanzado puede falsificar algunos parámetros del navegador para cambiar su ID.

Además, si un usuario actualiza su navegador o sistema operativo, su huella digital probablemente cambiará. No es un identificador permanente, sino más bien un marcador temporal muy confiable.

FingerprintJS es una excelente opción si necesitas agregar una capa de seguridad o análisis básico sin usar cookies. El proyecto está activo, tiene una enorme comunidad (casi 28 mil estrellas en GitHub) y documentación clara.

¿Es adecuado para ti? Si el objetivo es filtrar el 90% de los bots y fraudes de aficionados, entonces definitivamente sí. Para sistemas bancarios con requisitos de seguridad críticos, quizás necesites buscar sus soluciones de pago con validación del lado del servidor, pero para la mayoría de los proyectos web, las capacidades de la versión MIT son más que suficientes.

Puedes probar la biblioteca en acción en su página de demostración: ábrela en modo normal, luego en incógnito, y verás que la magia funciona.

Proyectos relacionados