Pyison
Pyison es un tarpit para rastreadores web de IA
Introducción
- Como todos los rastreadores web, los bots de IA solicitan páginas a los servidores web y luego siguen los enlaces de la página a otras páginas. Al hacer esto, pueden construir un índice de todo un sitio web.
- Sin embargo, a diferencia de otros rastreadores web, los bots de IA presentan algunos problemas particulares
- Los administradores de servidores pueden configurar un archivo robots.txt, que indica a los rastreadores web qué páginas deben y no deben rastrear.
- Se ha descubierto que algunos rastreadores de IA ignoran este archivo. Existen preocupaciones de privacidad y derechos de autor al permitir que estos bots utilicen los datos de un sitio web para entrenar LLMs, especialmente cuando el usuario ha optado explícitamente por excluirse del rastreo.
- Algunos rastreadores también ignoran la limitación de velocidad. Cuando solicitan páginas lo más rápido posible, pueden generar una carga significativa en un servidor web.
- Aquí entra Pyison. Al igual que otros tarpits para rastreadores de IA (Nepenthes, Iocane), Pyison alimenta a los rastreadores web con una lista interminable de enlaces a otras páginas de su sitio. Esto atrapa a los rastreadores en un único sitio, donde navegarán sin fin por un mar de enlaces en constante crecimiento.
- Mantener a los rastreadores de IA atrapados en un solo lugar evita que indexen otras partes del sitio que el propietario podría no querer alimentar a los LLMs.
- Al mismo tiempo, estas páginas pueden contener toneladas de texto inútil. Cuando los LLMs incorporan este texto a sus modelos, pueden ser gradualmente "envenenados", ya que la entrada aleatoria hará que sus respuestas sean menos coherentes.
Motivaciones
- Crear software útil para hacer frente al aumento del robo de contenido por parte de los LLMs
- Resolver problemas en los tarpits de IA existentes:
- Generar texto aleatorio sin usar una cadena de Markov, LLMs ni muestras de escritura existentes
- No distinguir a los bots de IA por la cabecera User-Agent, ya que los rastreadores suelen disfrazarse de usuarios normales
- Diseñar un sitio realista parecido a un blog para evitar ser detectado
- Crear un framework extremadamente personalizable que permita una configuración adicional
- Proporcionar una solución que pueda integrarse fácilmente en un sitio web existente
- Compatible con proxies inversos/servidores web específicos pero no los requiere; ofrece configuración de sub-ruta con un ajuste de document root
- Ejecutarse con una huella pequeña en lugar de un CMS completo o un servidor web repleto de funciones
Especificaciones técnicas
- Este proyecto ejecuta un servidor web dinámico utilizando la biblioteca HTTPServer de Python
- Las frases se generan con una mezcla 50/50 entre palabras inglesas aleatorias y "palabras vacías"
- Pyison utiliza una sal global junto con la URL de la página para alimentar su RNG. Esto garantiza que, si los rastreadores realizan una "comprobación de cordura" recargando una página, esta será la misma que la última vez que la comprobaron. Al mismo tiempo, diferentes servidores deben usar diferentes semillas globales para que no todos los sitios que usan Pyison tengan el mismo aspecto.
- Es posible generar un número ilimitado de páginas, ya que Pyison no crea realmente ningún archivo permanente. Es un servidor web dinámico, por lo que solo genera html y lo envía al cliente.
- El uso de etiquetas de contenido HTML, formato CSS e imágenes debería hacer que el sitio parezca un poco más realista para un rastreador.
- Es posible configurar la salida de Pyison sin reescribir el programa, modificando los archivos de configuración, estáticos y de plantilla.
- Pyison responde a solicitudes POST y PUT errantes con un 404 en caso de que los rastreadores comprueben si esos verbos HTTP están configurados.
Primeros pasos
-
Clona este proyecto en una carpeta local
-
Cambia los ajustes en el archivo config/config.json
- ¡Establece el
random-seed a un número aleatorio!
- Establece el número de
port que usará el servidor
- Consulta la sección Configuración para más información
-
(Opcional pero recomendado) Actualiza la plantilla HTML, el CSS, las imágenes y el robots.txt a tu gusto
- Este proyecto es más efectivo si las páginas se ven diferentes, lo que se puede lograr variando la estructura HTML y CSS. Reordena y renombra algunas cosas, o reescríbelo por completo.
-
(Opcional) Edita el robots.txt si quieres cambiar qué bots se ven afectados
-
Configura el entorno del servidor con cualquiera de los métodos siguientes
-
Coloca el servidor detrás de un proxy inverso
Ejecución local
- Instala nltk
- Ejecuta Pyison
- Comprueba que se está ejecutando
- Abre
http://localhost:<your port number> en un navegador
Docker
Con docker compose
Con docker run
docker run --tty --name pyison -p "127.0.0.1:80:80" --rm ghcr.io/jonaslong/pyison:main
- (Opcional) Elimina la bandera
--rm para conservar el contenedor
Compilar desde el código fuente
- Clona el repositorio localmente
docker build -t pyison:latest .
- Ejecuta el contenedor con
docker run --tty --name pyison -p "127.0.0.1:80:80" --rm pyison:latest
Proxy Inverso
Es muy recomendable que uses un proxy inverso para servir este contenido. Puede reducir la carga del servidor al almacenar páginas en caché e introducir límites de velocidad, además de servir el contenido a través de https y proteger contra algunos exploits básicos de servidores web.
Consideraciones
- Estos ejemplos usan Nginx Proxy Manager, pero cualquier software de proxy inverso debería funcionar
- Pyison es compatible con los ajustes SSL más estrictos de NPM
- NPM debería pasar la cabecera http
User-Agent de NPM al servidor Pyison sin ninguna configuración especial. Usa proxy_pass_header User-Agent; si es necesario.
Configuración de subdominio independiente
Configuración de sub-ruta
-
Para usar Pyison en una sub-ruta, usa la siguiente configuración de ubicación
# Handles the root page ("example.com/tarpit")
location /tarpit {
proxy_pass http://localhost:80;
}