Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Pyison — Tarpit Pythonico per crawler AI | Kitploit
Strumenti/GitHubGitHub/jonaslong/pyison
Strumenti DifensiviScripting e AutomazioneSicurezza WebApprendimento e FormazioneCrawlerAnti-Bot
GitHubjonaslong/pyison

Pyison

Tarpit Pythonico per crawler AI

Vedi Repository
122210 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Pyison

Pyison è un tarpit per i webcrawler AI

Introduzione

  • Come tutti i web crawler, i bot AI richiedono pagine dai server web e poi seguono i collegamenti sulla pagina verso altre pagine. In questo modo, possono creare un indice di un intero sito web.
    • A differenza di altri web crawler, però, i bot AI presentano alcune problematiche uniche
      • Gli amministratori del server possono configurare un file robots.txt, che dice ai web crawler quali pagine dovrebbero e non dovrebbero scansionare.
        • Alcuni crawler AI sono stati trovati a ignorare questo file. Ci sono preoccupazioni per la privacy e il copyright nel permettere a questi bot di utilizzare i dati di un sito web per addestrare LLM, specialmente quando l'utente ha esplicitamente rinunciato alla scansione.
        • Alcuni crawler ignorano anche la limitazione della frequenza. Quando richiedono pagine il più velocemente possibile, possono mettere un carico significativo su un server web.
    • Ecco Pyison. Come altri tarpit per crawler AI (Nepenthes, Iocane), Pyison fornisce ai web crawler una lista infinita di collegamenti ad altre pagine del suo sito. Questo intrappola i crawler in un unico sito, dove navigheranno all'infinito in un mare di link in continua crescita.
      • Mantenere i crawler AI bloccati in un posto impedisce loro di indicizzare altre parti del sito che il proprietario potrebbe non voler fornire agli LLM.
      • Allo stesso tempo, queste pagine possono contenere tonnellate di testo inutile. Quando gli LLM incorporano questo testo nei loro modelli, possono essere gradualmente "avvelenati" poiché l'input casuale renderà le loro risposte meno coerenti.

Motivazioni

  • Creare software utile per affrontare l'aumento del furto di contenuti da parte degli LLM
  • Risolvere problemi nei tarpit AI esistenti:
    • Generare testo casuale senza l'uso di una catena di Markov, LLM o campioni di scrittura esistenti
    • Non discriminare i bot AI tramite l'header User-Agent, poiché i crawler spesso si travestono da utenti normali
    • Progettare un sito dall'aspetto realistico simile a un blog per evitare il rilevamento
      • Creare un framework estremamente personalizzabile per permettere ulteriori configurazioni
    • Fornire una soluzione che possa integrarsi facilmente in un sito web esistente
      • Supporta ma non richiede proxy inversi/server web specifici, fornisce configurazione di sotto-percorso con un'impostazione di document root
    • Eseguire con un'impronta ridotta piuttosto che un intero CMS o server web ricco di funzionalità

Specifiche Tecniche

  • Questo progetto esegue un server web dinamico utilizzando la libreria HTTPServer di Python
  • Le frasi sono prodotte da un mix 50/50 tra parole inglesi casuali e "stop words"
  • Pyison utilizza un salt globale e un URL di pagina per inizializzare il suo RNG. Questo garantisce che se i crawler eseguono un "controllo di sanità" ricaricando una pagina, sarà la stessa dell'ultima volta che l'hanno controllata. Allo stesso tempo, server diversi dovrebbero usare semi globali diversi in modo che non tutti i siti che usano Pyison appaiano uguali.
  • È possibile generare un numero illimitato di pagine, poiché Pyison non sta effettivamente creando alcun file permanente. È un server web dinamico, quindi genera semplicemente HTML e lo invia al client.
  • L'uso di tag di contenuto HTML, formattazione CSS e immagini dovrebbe far sembrare il sito un po' più realistico a un crawler.
  • È possibile configurare l'output di Pyison senza riscrivere il programma, modificando i file di configurazione, statici e template
  • Pyison risponde alle richieste POST e PUT errate con un 404 nel caso in cui i crawler testino che quei verbi HTTP siano configurati

Per Iniziare

  • Clona questo progetto in una cartella locale

  • Modifica le impostazioni nel file config/config.json

    • Imposta il random-seed su un numero casuale!
    • Imposta il numero di port per il server
    • Vedi la sezione Configurazione per maggiori informazioni
  • (Opzionale ma consigliato) Aggiorna il template HTML, CSS, immagini e robots.txt a tuo piacimento

    • Questo progetto è più efficace se le pagine appaiono diverse, cosa che può essere fatta variando la struttura HTML e CSS. Riorganizza e rinomina alcune cose, o riscrivilo completamente.
  • (Opzionale) Modifica il robots.txt se vuoi cambiare quali bot sono interessati

  • Configura l'ambiente del server con uno dei metodi seguenti

  • Metti il server dietro un Proxy Inverso

    Esecuzione Locale

    • Installa nltk
      • pip install nltk
    • Esegui Pyison
      • python3 src/server.py
    • Verifica che sia in esecuzione
      • Apri http://localhost:<numero porta> in un browser

    Docker

Proxy Inverso

È altamente consigliato utilizzare un proxy inverso per servire questo contenuto. Può ridurre il carico del server memorizzando nella cache le pagine e introducendo limiti di frequenza, oltre a servire il contenuto su https e proteggere da alcuni exploit di base del server web.

Considerazioni

  • Questi esempi usano Nginx Proxy Manager, ma qualsiasi software proxy inverso dovrebbe funzionare
  • Pyison supporta le impostazioni SSL più rigorose di NPM
  • NPM dovrebbe passare l'header HTTP User-Agent da NPM al server Pyison senza alcuna configurazione speciale. Usa proxy_pass_header User-Agent; se necessario.

Configurazione Sottodominio Indipendente

  • Seleziona le seguenti impostazioni nell'interfaccia utente, o inserisci le impostazioni equivalenti nel file di configurazione:

    L'interfaccia di NGINX Reverse Proxy. Il dialogo 'Modifica Proxy Host' è aperto.
    • Nomi di dominio: un dominio o sottodominio che controlli, come tarpit.example.com
    • Schema: http
    • Hostname/IP di inoltro: localhost, o il nome del container docker se si usa una rete docker
    • Porta di inoltro: qualunque porta definita in docker-compose/run command/config.json (default è 80)
    • Abilita Cache Assets e Block Common Exploits, ma non Websockets Support

Configurazione Sotto-percorso

  • Per usare Pyison in un sotto-percorso, usa la seguente configurazione di location

    root@kitploit:~
    # Handles the root page ("example.com/tarpit")
    location /tarpit {
        proxy_pass http://localhost:80;
    }
    
    # Handles all sub-pages ("example.com/tarpit/a" and "example.com/tarpit/a/b")
    location /tarpit/ {
        proxy_pass http://localhost:80;
    }
    
    # Handles all urls with a 3-letter file extension ("example.com/tarpit/style.css" and "example.com/tarpit/images/picture.jpg")
    # Note that the ~ denotes regex matching. The string immediately following it must be a valid regex statement.
    location ~ .*\/tarpit\/.*\....$ {  
        proxy_pass http://localhost:80;
    }
    
  • Ecco una configurazione funzionante usando l'interfaccia utente:

    L'interfaccia di NGINX Reverse Proxy. Il dialogo 'Modifica Proxy Host' è aperto nella scheda 'Percorsi personalizzati'.
    • Il primo blocco di location, /tarpit, non ha configurazione personalizzata. Si comporterà come il primo blocco di location definito sopra.
    • Il secondo blocco di location, /tarpit/, contiene il secondo e terzo blocco di location definiti sopra
    • Sostituisci tarpit con il percorso radice desiderato.
      • Se si usa un percorso radice più profondo come /tar/pit, nota che il terzo blocco di location usa regex, quindi qualsiasi slash deve essere escape con un backslash

Configurazione

  • Il file config.json definisce varie impostazioni per una facile personalizzazione:
  • port (default 80)
    • Su quale porta servire i contenuti
  • random-seed (Per favore cambialo!)
    • Seed globale (salt) usato per assicurarsi che non ogni server web abbia lo stesso testo identico
    • Impostalo su un numero casuale, non deve essere sicuro
  • document-root (default "/")
    • Antepone un percorso ai collegamenti
    • Dovrai cambiarlo solo se stai usando un proxy inverso e servendo in una sotto-directory
      • Se è così, usa un percorso completo o uno relativo alla radice
        • ad esempio https://example.com/pyison/ o /pyison/
  • fake-image-dir (default ["images"])
    • Tutte le immagini appariranno servite da questo percorso
    • Accetta una singola stringa, null, o una lista di opzioni tra cui scegliere casualmente
  • fake-css-dir (default ["css"])
    • Tutti i file css appariranno serviti da questo percorso
    • Accetta una singola stringa, null, o una lista di opzioni tra cui scegliere casualmente
  • spacing-characters (default ["_","-","%20"])
    • Spazi da usare tra le parole in un URL di pagina

HTML Templating

  • Prima di servire i tuoi file HTML, Pyison sostituirà alcuni tag preimpostati con i propri valori

    Valori Statici

    Quando uno di questi tag viene specificato più volte nel template, ogni valore sarà lo stesso
    • {HOME}
      • Collegamento al document root, come definito nella configurazione
    • {TITLE}
      • Testo del titolo della pagina, basato sull'URL corrente
        • es /blog/about/once-upon-a-time -> Once Upon A Time
    • {UPTITLE}
      • Testo del titolo della pagina genitore, generato dall'URL corrente
    • {MAIN}
      • Dovrebbe essere usato come contenuto principale del sito. Genererà diversi paragrafi contenenti testo casuale, insieme a intestazioni di sezione e sottosezioni. Collegamenti casuali possono anche essere presenti in ogni paragrafo.
    • {UP}
      • Percorso alla pagina genitore
      • es: /blog/about/once-upon-a-time -> /blog/about
    Ogni occorrenza di questi tag verrà sostituita da un valore unico

Images

Logo Pyison. Un'immagine rettangolare in formato orizzontale con sfondo grigio granuloso. Testo verde brillante in un font a pennello con ombra di testo rosso scuro è centrato nel terzo superiore dell'immagine. Legge 'Pyison'. Vicino al fondo, un testo bianco stilizzato angolare legge 'This is a tar pit for AI webcrawlers'. C'è un visibile artefatto JPEG in tutta l'immagine a un esame più attento.

Ecco un esempio di come appare il sito prima di qualsiasi modifica del template:

Immagine rimpicciolita di un'intera pagina Pyison. Usa testo nero su sfondo giallo chiaro. In cima alla pagina c'è una barra di navigazione verde con collegamenti contenenti parole casuali. Sotto la barra di navigazione c'è il titolo 'Home' e un'immagine del logo che recita 'Pyison: This is a tar pit for AI webcrawlers'. Sotto le immagini ci sono diversi paragrafi di parole casuali con intestazioni a vari livelli di indentazione. Questi paragrafi occupano la maggior parte della pagina. Parte del testo all'interno dei paragrafi sono collegamenti ad altre pagine. Vicino al fondo della pagina, c'è un finto blocco autore con un altro logo Pyison. Il blocco legge 'Written by It'S An'. Sotto c'è una sezione 'Other Posts', con molti altri collegamenti.
Scarica lo strumento

Con docker compose

  • Crea un file docker-compose.yml minimo contenente
    root@kitploit:~
    services:
      pyison:
        image: "ghcr.io/jonaslong/pyison:main"
        container_name: pyison
        tty: true
        ports:
          - 80:80
    
  • docker compose up
    • (Opzionale) Usa il flag -d per staccarsi dal container
  • Affinché le modifiche ai file locali abbiano effetto, clona questo repository e usa un bind mount. Vedi il file compose completo.

Con docker run

  • docker run --tty --name pyison -p "127.0.0.1:80:80" --rm ghcr.io/jonaslong/pyison:main
    • (Opzionale) Rimuovi il flag --rm per mantenere il container

Compilazione dal sorgente

  • Clona il repository localmente
  • docker build -t pyison:latest .
  • Esegui il container con docker run --tty --name pyison -p "127.0.0.1:80:80" --rm pyison:latest
  • es: /tar/pit richiederebbe location ~ .*\/tar\/pit\/.*\....$ nel terzo blocco di location
  • Aggiorna l'impostazione document-root di Pyison con il sotto-percorso usato dal proxy (vedi la sezione Configurazione)
  • Vedi le sezioni sopra per ulteriori configurazioni di host, porte, SSL, ecc.
  • Questo influenzerà anche come gli URL di pagina vengono divisi per decodificarli nuovamente in titoli
  • unsafe-characters (default ["'","`"])
    • Caratteri che possono comparire naturalmente nell'elenco di parole ma dovrebbero essere rimossi dagli URL
    • Per impostazione predefinita, questo rimuove gli apostrofi (`) e le virgolette singole (')
  • robots-txt (default "assets/robots.txt")
    • Configura il file che viene servito a /robots.txt
    • Se la stringa è vuota, verrà restituita una risposta 404
  • html-templates (default ["assets/template.html"])
    • File HTML da servire, contenente testo di formato per fornire valori casuali (vedi HTML Templating)
    • Accetta una singola stringa, o una lista di opzioni tra cui scegliere casualmente
  • css-files (default ["assets/style.css"])
    • File CSS da servire
    • Non viene fatta alcuna sostituzione sui file CSS
    • Accetta una singola stringa, o una lista di opzioni tra cui scegliere casualmente
  • images
    • ico (default ["assets/logo.ico"])
    • jpg (default ["assets/logo.jpg"])
    • png (default["assets/logo.png"])
    • Per ciascuna delle estensioni immagine sopra: un singolo file immagine, null, o una lista di immagini da cui scegliere casualmente
  • remove-from-stop-words
    • La libreria nltk ha un elenco di "stop words" utile per generare molte parole comuni. Tuttavia, alcune voci non dovrebbero essere usate per la generazione di testo perché sono un'ovvia indicazione che si tratta di contenuto generato
  • {CSSLINK}
    • URL casuale a un documento CSS
    • Il percorso iniziale di questo URL (es /styles) può essere impostato nella configurazione
    • Assicurati di specificare '.css' immediatamente dopo il tag. Questo è come il server web sa di inviare CSS piuttosto che altro HTML.
      • Il documento effettivo restituito dal server verrà scelto in base alla/e pagina/e CSS specificata/e nella configurazione
  • Valori Dinamici

    • {WORD}
      • Genera una singola parola casuale. I nomi propri possono essere in maiuscolo.
    • {NAME}
      • Genera due parole in maiuscolo con uno spazio in mezzo.
    • {SENTENCE}
      • Genera una frase casuale che inizia con una lettera maiuscola e termina con un punto.
    • {PIC}
      • Genera un URL casuale a un file immagine
      • Il percorso iniziale di questo URL (es /images) può essere impostato nella configurazione
      • Assicurati di mettere un'estensione di file appropriata dopo il collegamento (.png, .jpg, .ico)
        • L'immagine effettiva restituita dal server verrà scelta in base all'estensione fornita e all'immagine/i specificata/e nella configurazione
    • {LINK}
      • Genera un collegamento casuale, che può contenere sotto-percorsi
      • Il nome della pagina può essere separato da trattini o underscore
      • es: /dressage/electrochronometer/himself-she-eciliate
    • {OVER}
      • Genera un collegamento casuale a una pagina sorella
      • es: Quando si visita /neighborliness/wont_unhonest, un tag {OVER} potrebbe essere sostituito con /neighborliness/hooliganism
    • {NEWTITLE}
      • Genera un titolo casuale
      • Usa una serie di parole casuali in Capitalizzazione del Titolo
      • es: Nectarial Electrofusion Which Dephosphorization
      • Se questo tag segue un tag {LINK} o {OVER}, il titolo e l'url saranno sincronizzati
        • es: <a href="{OVER}">{NEWTITLE}</a> potrebbe essere sostituito con <a href="/swordmanship/yeller/over-will-oghuz">Over Will Oghuz</a>
        • I tag vengono valutati in avanti attraverso il template. Un tag {NEWTITLE} cercherà all'indietro il tag {LINK} o {OVER} più vicino con cui sincronizzarsi.
          • I tag si abbineranno sempre correttamente quando qualsiasi tag {LINK} o {OVER} è immediatamente seguito dal suo tag {NEWTITLE}, se si desidera un
    {NEWTITLE}