Fingerprinting para detectar bots en el blog

Imagen de Fingerprinting para detectar bots en el blog

A mediados de la semana pasada el tráfico del blog, de pronto, subió varios órdenes de magnitud. No era tráfico legítimo, eran puros bots, pero estaban sorteando todos mis bloqueos previos.

Como siempre, no es que me moleste que un spider de un buscador capture mis páginas, está todo bien, pero el consumo excesivo de recursos de los spiders de distintas empresas que coleccionan data para entrenar modelos de AI me tiene podrido.

¿Y qué hago? Ah, me encanta inventar nuevos métodos para bloquerlos y aprender de sus métodos, esta vez implementé un fingerprinting rudimentario y lo fui mejorando con el paso de los días.

No todo bot es perfecto

Usar un LLM para explorar un sitio web usando un browser real ¿Es un problema? No, por supuesto que no, salvo que te preocupe el consumo de energía y el calentamiento global 😅, pero si te gusta, hacelo, nadie podrá impedir que un robot use un browser real para navegar.

Aquí la cuestión es atentar contra las automatizaciones de cosas que no deberían abusar, por ejemplo, usar un browser "headless" (por línea de comandos, no muestra nada) para escanear las 10.000 notas del blog una y otra vez diez veces por día. Eso es abuso. 

Es bastante "detectable", pero hoy en día ya no usan servidores VPS que contrataron por ahí (tengo el 80% bloqueado desde su ASN, bloqueo 5k a 10k de requests por día), ni de países turbios (10k por día), no, el problema es que usan redes de IP de gente común que no sabe que su IP está siendo usado para esto.

¿Cómo lo hacen? Es fácil, apelan a aplicaciones como MagisTV y otras que la gente instala por fuera de la Play Store y todas llevan un troyano, el troyano lo único que hace es utilizar el IP del tarado en curso como si fuese un proxy.

Estos proxies se contratan para lo que sea, puede ser para navegar porno ilegal, para poder ver el mundo por fuera de Rusia, enviar spam o, actualmente o más usado, para escanear sitios sin permiso del autor y haciéndose pasar por una persona "normal".

El problema es que no puedo bloquear IPs de Argentina o latinoamérica a mansalva, o ASNs de proveedores de internet, me quedo sin público! 😁

Pero los bots todavía tienen que trabajar como bots para ser eficientes y es ahí donde podés encontrarlos.

La huella

El sistemita que armé es imperfecto, hay algunos pagos que obtienen mucha más información de cada usuario, pero con lo básico armé lo siguiente.

Va detectando inconsistencias entre los encabezados, ya de por sí muchos declaran un browser en el User Agent que no coincide con el resto, o le faltan configuraciones que son básicas en el browser de una persona, se presentan de forma insegura, no aceptan headers o aceptan todos sin chistar, todos tienen configurado su idioma ¿Quién no? un bot por ejemplo.

De todos los visitantes colecciona cierta data, lo califica, algunos son sólo dudosos, otros sospechosos, si el puntaje es muy alto ¡Ban! por 15 minutos, pero 15 minutos afuera.

Esta huella se repite, no es tan precisa como cuando se involucra javascript, pero como hay algunos frikis de la privacidad que bloquean el acceso al JS o lo desactivan, tampoco debo ser tan draconiano.

Gracias a este sistema ya identifiqué varios ASN de proveedores de hosting que no estaba bloqueando, el tráfico bestial de la semana pasada se calmó un poco, no es preciso, da algunos falsos positivos, pero es una barrear más, ya a nivel sitio, que estoy implementando.

Las capas de la cebolla

En este momento mi "protección" tiene varios niveles, primero que nada está Cloudflare, allí tengo lo siguiente:

Un listado de IPs que siempre son usadas para ataques, bloqueado Una treintena de países "de mierda", bloqueados Un listado enorme con más de 250 proveedores de hosting y VPS, bloqueados

No les pongo block directo sino un "challenge" invisible que maneja Cloudflare, si lo pasan también puede suceder que sean bots "legítimos", pero a veces se cuela uno que no.

Luego llegamos al blog, aquí tengo otras capas de protección

Listado de bloqueos por IP, incluyendo rangos enteros Listado de bloqueo de keywords, ya obsoleto Bloqueo automático por SQL Injections Análisis de User Agent, muchos bots usan scripts desactualizados con versiones de browsers anticuadas Fingerprinting de headers, última protección.

El problema con las que pasan Cloudflare es que consumen recursos del sitio, crean sesiones en el server, consumen base de datos, etc.

Tengo un buen servidor en este momento, el sitio no sólo cuenta con caché propia (guarda en archivo HTML la página solicitada, guarda por unos 30 minutos max), además el server tiene Redis para cachear esas consultas repetidas y el blog soporta Redis en su conexión a la base de datos.

Si voy a ver el uso de recursos es realmente bajo. Pero no quiero dar el brazo a torcer 😁

¿Vale la pena tanta dedicación? ¡Por supuesto! Estoy aprendiendo un montón con todas estas contramedidas, si es por mí podría dejarlos pasar sin problemas, pero alguien les tiene que hacer frente de alguna forma y el problema es que mientras más ignorás el iceberg que se acerca, más probable es que tarde o temprano seas su Titanic. Yo voy a tener siempre listos los botes 😋

PS: Agregué ayer una función para evitar que algún pobre santo ligue un falso positivo, son tantas las técnicas que se solapan aquí que no es raro que alguno de ustedes termine injustamente baneado.

PS: Si llegás a ver esto alguna vez, avisame



copyright©2026 Fabio Baccaglioni - Fabio.com.ar - Versión simplificada Old School