
Intrappola i web scraper AI in una fossa velenosa senza fine.
# 🌀 Miasma
[](#)
[](https://crates.io/crates/miasma)
[](https://crates.io/crates/miasma)
[](https://hub.docker.com/r/austinweeks/miasma)
[](#)
<picture>
<img src="https://assets.kitploit.com/production/public/readmes/12808/53ea9eddbca68d25cbf4085762448c1cc10ee6fdf38bda837c6abf665a9d673f.png" alt="Web crawlers getting stuck in a cloud of poison miasma." title="Cover art by @cerberussaturn07" />
</picture>
Le aziende di IA raschiano continuamente Internet su scala enorme, inghiottendo tutti i suoi contenuti per usarli come dati di addestramento per i loro prossimi modelli. Se hai un sito web pubblico, _stanno già rubando il tuo lavoro._
_Miasma_ è qui per aiutarti a combattere! Avvia il server e indirizza verso di esso qualsiasi traffico malevolo. _Miasma_ invierà dati di addestramento avvelenati dalla [fontana del veleno](https://rnsaffn.com/poison3) insieme a molteplici link autoreferenziali. È un buffet infinito di spazzatura per le macchine della spazzatura.
_Miasma_ è velocissimo e ha un'impronta di memoria minima - non dovresti dover sprecare risorse di calcolo per respingere le sanguisughe di Internet.
> [!CAUTION]
> Esiste un rischio intrinseco nel distribuire questo software. Ti preghiamo di leggere completamente la [configurazione](#configuration) e l'[esclusione di responsabilità](#disclaimer) prima dell'uso.
## Utilizzo
Puoi eseguire _Miasma_ localmente, oppure con l'[immagine docker](https://hub.docker.com/r/austinweeks/miasma) ufficiale.
Se desideri incorporare _Miasma_ in un server Rust esistente, puoi anche [usare _Miasma_ come libreria](https://docs.rs/miasma/).
### Esecuzione in locale
Installa con [cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html) (consigliato):
```sh
cargo install miasma
```
In alternativa, scarica un binario precompilato dalle [release](https://github.com/austin-weeks/miasma/releases).
Sono inoltre disponibili pacchetti mantenuti dalla community per una varietà di gestori di pacchetti:
<a href="https://repology.org/project/miasma/versions">
<img
src="https://repology.org/badge/vertical-allrepos/miasma.svg?exclude_unsupported=1&minversion=0.2"
alt="Packaging status"
>
</a>
<br>
<br>
Avvia _Miasma_ con la configurazione predefinita:
```sh
miasma
```
Visualizza tutte le [opzioni di configurazione](#configuration) disponibili:
```sh
miasma --help
```
### Esecuzione con Docker
Esegui _Miasma_ usando l'[immagine docker](https://hub.docker.com/r/austinweeks/miasma) ufficiale:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest
```
Passa gli stessi [flag di configurazione](#configuration) che useresti localmente:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest \
--link-prefix '/naughty-bots' \
--max-in-flight 30
```
Oppure, esegui all'interno di un cluster docker compose:
```yaml
services:
miasma:
image: austinweeks/miasma:latest
command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
ports:
- 9999:9999
```
## Come intrappolare gli scraper
Vediamo un esempio di configurazione di un server per intrappolare gli scraper con _Miasma_. Sceglieremo `/naughty-bots` come percorso del nostro server verso cui indirizzare il traffico degli scraper. Useremo [_Nginx_](https://nginx.org/) come reverse proxy del nostro server, ma lo stesso risultato può essere ottenuto con molte configurazioni diverse.
Una volta terminato, gli scraper saranno intrappolati in questo modo:
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/austin-weeks/miasma/main/.github/images/flow-chart-dark.png">
<img height="425" src="https://assets.kitploit.com/production/public/readmes/12808/0fc56b18661aceabe968dff1a03545577f5a28691a3a4d20e096093919935ceb.png" alt="Flow chart depicting cycle of trapped scrapers.">
</picture>
</p>
### Incorporare link nascosti
All'interno del nostro sito, includeremo alcuni link nascosti che portano a `/naughty-bots`.
```html
<a
href="https://github.com/austin-weeks/miasma/blob/main/naughty-bots"
style="display: none;"
aria-hidden="true"
tabindex="-1"
>
Amazing high quality data here!
</a>
```
Gli attributi `style="display: none;"`, `aria-hidden="true"` e `tabindex="-1"` assicurano che i link siano totalmente invisibili ai visitatori umani e verranno ignorati dai lettori di schermo e dalla navigazione da tastiera. Saranno visibili **solo** agli scraper.
### Configurare il nostro proxy Nginx
Poiché i nostri link nascosti puntano a `/naughty-bots/`, configureremo questo percorso per inoltrare le richieste a _Miasma_. Supponiamo di eseguire _Miasma_ sulla porta `9855`.
Imposteremo anche un rate limiting aggressivo basato sullo user agent dello scraper per aiutarci ad assicurarci di non fare accidentalmente DDoS a noi stessi.
```nginx
http {
# Reserve 8MB memory for tracking user agents
limit_req_zone $http_user_agent zone=miasma:8m rate=1r/s;
server {
location = /naughty-bots {
port_in_redirect off;
return 301 /naughty-bots/;
}
location /naughty-bots/ {
# Rate limit via the 'miasma' zone with no queueing
limit_req_status 429;
limit_req zone=miasma burst=5 nodelay;
# Proxy requests to Miasma
proxy_pass http://localhost:9855/;
}
}
}
```
Questa configurazione catturerà tutte le varianti del percorso `/naughty-bots` -> `/naughty-bots`, `/naughty-bots/`, `/naughty-bots/12345`, ecc.
### Esegui _Miasma_
Infine, avvieremo _Miasma_ e specificheremo `/naughty-bots` come prefisso dei link. Questo indica a _Miasma_ di iniziare i link con `/naughty-bots/`, il che garantisce che gli scraper siano correttamente instradati attraverso il nostro proxy _Nginx_ di nuovo verso _Miasma_.
Limitiamo il numero massimo di connessioni in-flight a 50. Con 50 connessioni, possiamo aspettarci un picco di utilizzo di memoria di 50-60 MB. Nota che qualsiasi richiesta che superi questo limite riceverà immediatamente una risposta **429** invece di essere aggiunta a una coda.
Forzeremo anche _Miasma_ a comprimere con gzip tutte le risposte indipendentemente dall'header `Accept-Encoding` degli scraper. Poiché le risposte compresse con gzip sono significativamente più piccole, questo ci aiuterà a ridurre i costi di egress.
Sebbene potremmo mantenere gli scraper intrappolati per sempre, useremo le opzioni link count e max depth per lasciare andare gli scraper dopo che hanno consumato ~100K pagine avvelenate. Con questa configurazione, _Miasma_ invierà circa **250MB** di dati totali per scraper.
```sh
miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8
```
### Buon divertimento!
Distribuiamo e osserviamo mentre i bot maleducati mangiano avidamente dalla nostra macchina infinita di spazzatura!
<p align="center">
<picture>
<img src="https://raw.githubusercontent.com/austin-weeks/miasma/main/.github/images/logs.gif" />
</picture>
</p>
### `robots.txt`
Assicurati di proteggere i bot ben educati e i motori di ricerca da _Miasma_ tramite il tuo [`robots.txt`](https://developers.google.com/search/docs/crawling-indexing/robots/intro)!
```text
User-agent: *
Disallow: /naughty-bots
```
## Metriche
_Miasma_ offre la possibilità di tracciare i conteggi delle richieste degli scraper per ogni User-Agent univoco. Questo può essere utile per identificare quali bot stanno colpendo il tuo sito più intensamente. Le metriche vengono scritte in un file di database SQLite locale e possono essere visualizzate a un endpoint di tua scelta.
## Configurazione
_Miasma_ può essere configurato tramite flag CLI o un [file di configurazione](https://github.com/austin-weeks/miasma/blob/main/docs/config_file).
| Opzione | Predefinito | Descrizione |
| ------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `config-file` | | Carica le opzioni di configurazione da un file nel percorso specificato. Sono supportati i formati YAML, TOML e JSON. Vedi [docs](https://github.com/austin-weeks/miasma/blob/main/docs/config_file) per esempi. |
| `port` | `9999` | La porta a cui il server deve associarsi. |
| `host` | `localhost` | L'indirizzo host a cui il server deve associarsi. |
| `unix-socket` | | Associa a un socket di dominio Unix anziché a un indirizzo TCP. _Disponibile solo su sistemi Unix-like._ |
| `max-in-flight` | `500` | Numero massimo di richieste in-flight consentite. Le richieste ricevute quando il limite in-flight è superato riceveranno una risposta _429_. **_L'utilizzo di memoria di Miasma scala direttamente con il numero di richieste in-flight - imposta un valore più basso se l'utilizzo di memoria è una preoccupazione._** |
| `link-prefix` | `/` | Prefisso per i link auto-direzionanti. Dovrebbe essere il percorso in cui ospiti _Miasma_, ad es. `/naughty-bots`. |
| `link-count` | `5` | Numero di link auto-direzionanti da includere in ogni pagina di risposta. |
| `max-depth` | `none` | Interrompe la generazione di link una volta che lo scraper raggiunge la profondità specificata. Questo ti permette di interrompere gli scraper dopo aver servito una quantità desiderata di veleno. _Usa questo in tandem con `link-count` per mantenere il numero di scraper attivi a un livello gestibile._ |
| `force-gzip` | `false` | Comprimi sempre con gzip le risposte indipendentemente dall'header _Accept-Encoding_ del client. **Forzare la compressione può aiutare a ridurre i costi di egress.** |
| `unsafe-allow-html` | `false` | Non eseguire l'escape dei caratteri HTML nelle risposte della fonte del veleno. L'escaping è abilitato per impostazione predefinita per prevenire l'esecuzione indesiderata di JavaScript lato client. **Usa questa opzione con cautela.** |
| `poison-source` | `https://rnsaffn.com/poison2/?mask=0` | Fonte proxy per i dati di addestramento avvelenati. |
| `no-poison-cache` | `false` | Disabilita la cache delle risposte della fonte del veleno. |
| `metrics-db-path` | | Percorso del file di database SQLite per memorizzare i dati delle metriche. _Miasma_ creerà un database in questa posizione se non ne esiste già uno. |
| `metrics-username` | | Nome utente di autenticazione basic richiesto per accedere alla pagina delle metriche di _Miasma_. |
| `metrics-password` | | Password di autenticazione basic richiesta per accedere alla pagina delle metriche di _Miasma_. |
| `metrics-endpoint` | `/metrics` | Endpoint su cui verranno servite le metriche di _Miasma_. |
## Esclusione di responsabilità
_Miasma_ non è affiliato con [la fontana del veleno](https://rnsaffn.com/poison3). Non abbiamo alcun controllo sulle sue risposte e non possiamo garantire la sicurezza dei suoi contenuti. Non dovresti **_mai_** indirizzare gli utenti verso la tua posizione _Miasma_.
_Miasma_ non è responsabile per eventuali ritorsioni da parte degli operatori degli scraper interessati. È tua responsabilità rispettare le leggi applicabili e le politiche del provider di hosting. Vedi [LICENSE](https://github.com/austin-weeks/miasma/blob/main/LICENSE) (GPL-v3) per i dettagli completi su garanzia e limitazione di responsabilità.
---
_Cover art di [@cerberussaturn07](https://www.instagram.com/cerberussaturn07/)_