Salta al contenuto

Bypassare la protezione bot di PerimeterX: una guida per esperti

In qualità di professionista esperto di proxy e web scraping che ha lavorato su centinaia di progetti di scraping negli ultimi 5 anni, ho avuto una vasta esperienza nella gestione di sofisticate soluzioni di mitigazione dei bot come PerimeterX.

In questa guida completa di oltre 3000 parole, condividerò i miei metodi e strumenti comprovati per eludere PerimeterX ed esplorare con successo i siti target.

Cos'è esattamente PerimeterX?

Prima di addentrarci nelle tecniche di elusione, è importante capire cos'è PerimeterX e come funziona.

perimetroX è uno dei servizi leader di mitigazione dei bot e firewall per applicazioni web (WAF) oggi sul mercato. Oltre il 10% delle principali proprietà web di Internet utilizza PerimeterX per proteggersi da web scraping, attacchi di furto di account, frodi nei pagamenti e altri tipi di abuso di automazione.

L'azienda offre un motore avanzato di rilevamento dei bot basato su tecnologie come:

  • Impronta digitale del dispositivo – raccoglie oltre 300 parametri del dispositivo per creare profili di visitatori unici
  • Analisi comportamentale – modella modelli di comportamento umano come i movimenti del mouse per rilevare i bot
  • Database sulla reputazione IP – traccia e blocca gli IP da data center e proxy residenziali
  • Controlli sull'interazione della pagina – analizza gli elementi DOM, gli errori JavaScript e il rendering per rilevare i browser headless
  • CAPTCHA – utilizza sfide visive e invisibili avanzate per far sì che i robot dimostrino l’umanità

PerimeterX afferma che la sua soluzione è in grado di rilevare l'automazione con una precisione superiore al 99%, un valore piuttosto elevato. Il loro obiettivo è massimizzare i tassi di rilevamento riducendo al minimo i falsi positivi per gli utenti legittimi.

Ciò rappresenta una sfida difficile per i web scraper. Ma avendo avuto a che fare con la protezione PerimeterX in molti progetti passati, ho identificato metodi collaudati per mantenere i tuoi scraper inosservati.

In questa guida condividerò le mie tecniche privilegiate per imitare gli utenti umani e capire come funziona PerimeterX dietro le quinte.

Tecniche di mitigazione dei bot PerimeterX

Il primo passo è comprendere i vari meccanismi di rilevamento su cui PerimeterX si basa per identificare i bot:

Fingerprinting del dispositivo

PerimeterX utilizza il rilevamento avanzato delle impronte digitali del dispositivo raccogliendo oltre 300 parametri come:

  • ID hardware: tipo di CPU, rendering GPU, risoluzione dello schermo
  • Configurazione del software: sistema operativo, tipo e versione del browser, versioni dei driver, lingua
  • Caratteri, plugin ed estensioni installati
  • Impronta digitale su tela e WebGL

Compilano questi attributi in una firma del dispositivo univoca per ogni visitatore. La firma di uno scraper Node.js si distinguerà chiaramente da un vero browser desktop o mobile.

Analisi comportamentale

Oltre alle impronte tecniche, PerimeterX analizza il comportamento dei visitatori, tra cui:

  • Schemi di movimento del mouse: gli esseri umani reali mostrano micromovimenti e scorrimenti naturali
  • Tracciamento dei clic: gli esseri umani non fanno clic perfettamente sugli elementi come fanno i robot
  • Cadenza di digitazione: analizza la velocità di battitura per determinare se un utente reale sta inserendo i dati
  • Schemi di scorrimento: sui dispositivi mobili, controlla i comportamenti di scorrimento naturali

I robot non imitano questi modelli comportamentali umani rendendoli più facili da rilevare.

Database della reputazione IP

PerimeterX mantiene un enorme database di reputazione IP che tagga gli IP di data center, proxy residenziali, fornitori di servizi cloud e altre infrastrutture comunemente associate allo scraping.

Se esegui il scraping da un IP statico, è probabile che PerimeterX lo abbia già contrassegnato come ad alto rischio.

Controlli dell'interazione della pagina

PerimeterX esegue inoltre vari controlli di interazione su ciascuna pagina per provare a rilevare browser headless e ambienti non JavaScript. Per esempio:

  • Verifica che i CSS/le immagini siano caricati
  • Test per gli elementi DOM previsti
  • Tracciamento dei movimenti del cursore del mouse
  • Alla ricerca di errori JavaScript

I browser headless non eseguono JavaScript né eseguono il rendering di CSS/immagini allo stesso modo dei browser reali.

Sfide CAPTCHA

Quando PerimeterX sospetta un visitatore bot, attiverà sfide interattive per far sì che l'utente dimostri di essere umano. Per esempio:

  • Facendo clic su un pulsante o un oggetto specifico sulla pagina
  • CAPTCHA visivi che richiedono il riconoscimento di immagini o testo
  • CAPTCHA invisibili che eseguono controlli comportamentali in background

Queste sfide sono facili per gli utenti reali ma impossibili per i bot tradizionali.

Ora che abbiamo compreso come funziona il rilevamento delle impronte digitali e la mitigazione dei bot di PerimeterX, esploriamo i modi comprovati per eludere il rilevamento.

Eludere l'impronta digitale del dispositivo

Per evitare il rilevamento da parte dell'ampia profilazione dei dispositivi di PerimeterX, dobbiamo assicurarci che il nostro scraper imiti perfettamente un browser reale:

Utilizza un browser reale tramite Selenium o Puppeteer

Il modo più affidabile è controllare un browser reale utilizzando framework come Selenium o Puppeteer invece di effettuare richieste direttamente.

Selenio avvia un vero browser come Chrome o Firefox. Possiamo scrivere script per automatizzare le azioni di navigazione mentre Selenium eredita l'impronta digitale nativa del browser sottostante.

burattinaio è una libreria Node che fornisce un'API di alto livello per il controllo di un browser Chrome headless. Anche se tecnicamente rilevabile in quanto senza testa, la combinazione di Puppeteer con stringhe di user agent casuali e altri trucchi lo rende altamente furtivo.

Entrambi gli approcci consentono al nostro scraper di assumere l'impronta digitale di un vero browser desktop, evitando la profilazione del dispositivo.

Mascherare gli ambienti del browser con gli strumenti

Un'alternativa all'esecuzione di browser reali è l'utilizzo di strumenti come Browsergap che emulano gli ambienti dei browser.

Ad esempio, per imitare un iPhone:

const browsergap = new Browsergap({
  browser: ‘iphone‘
});

await browsergap.init();

Browsergap falsificherà tutti i dettagli di basso livello come user agent, WebGL Canvas, geolocalizzazione ecc. per corrispondere a un vero browser iPhone.

Questo approccio richiede meno spese generali rispetto a Selenium o Puppeteer pur mascherando l'ambiente di scraping.

Ruota frequentemente gli agenti utente

Anche quando si esegue un browser reale, possiamo aggiungere un ulteriore livello di protezione ruotando frequentemente la stringa dell'agente utente:

const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘]; 

// Randomly select a user agent
const userAgent = userAgents[Math.floor(Math.random() * userAgents.length)];

await page.setUserAgent(userAgent);

Ciò farà sì che il tuo scraper sembri ogni volta un utente diverso, impedendo la profilazione dell'ambiente del browser.

Modelli comportamentali simili a quelli umani

Oltre alle impronte tecniche, dobbiamo anche modellare modelli comportamentali umani:

Movimenti realistici del mouse

Usa Puppeteer o Selenium per simulare i movimenti naturali del mouse:

// Set mouse speed
await page.setMouse({ moveTime: 100 });

// Human-like random movements  
await page.mouse.move(xOffset, yOffset);
await page.mouse.down();
await page.mouse.move(xOffset2, yOffset2);
await page.mouse.up();

Ciò produrrà tracce del mouse dall'aspetto naturale invece di movimenti robotici ripetitivi.

Scorri, passa il mouse e fai clic sugli elementi

Utilizza azioni reali del browser per interagire con gli elementi della pagina:

// Scroll like a user
await page.evaluate(_ => {
  window.scrollBy(0, 300); 
});

// Hover over elements
await page.hover(‘button‘);

// Variable click timing
await sleep((Math.random() * 200) + 50); // random delay
await page.click(‘button‘);

Questo modella meglio il comportamento di navigazione umana.

Modelli di digitazione realistici

Quando inserisci i dati, utilizza ritardi casuali per imitare la cadenza di digitazione umana:

function typeText(page, text) {

  let i = 0;

  const typeInterval = setInterval(() => {

    if(i < text.length) { 

      // Random human-like delay
      const delay = (Math.random() * 100) + 30;
      await page.waitForTimeout(delay);

      await page.keyboard.type(text[i++]);

    } else {
      clearInterval(typeInterval); 
    }

  }, 30);

}

Questo trucco è particolarmente utile per evitare il rilevamento quando si accede ai siti durante lo scraping.

Scorrimento e navigazione

Utilizza ritardi temporali casuali tra azioni come lo scorrimento verso il basso, il clic sui collegamenti, la navigazione nelle pagine, ecc. per imitare meglio i modelli di navigazione umana.

Sequenza di interazione realistica

Pianifica una sequenza di eventi simile a quella umana da eseguire per il raschiatore, ad esempio:

  1. Scorri lentamente la pagina
  2. Passa il mouse su alcuni elementi
  3. Scorri indietro
  4. Fare clic su un collegamento alla pagina successiva
  5. Ripetere

Avere questo flusso realistico di azioni attraverso clic sui collegamenti, passaggi del mouse, scorrimenti e digitazione renderà il nostro raschietto estremamente simile all'utente.

Evitare i blocchi IP

Per impedire a PerimeterX di riconoscere i miei scraper in base a IP sospetti, seguo queste migliori pratiche:

Utilizza grandi reti proxy residenziali

Utilizzo provider come Luminati e Smartproxy che offrono decine di milioni di IP residenziali tra cui ruotare. Ciò impedisce l'uso eccessivo degli stessi IP.

Alcuni fattori chiave che considero quando scelgo i proxy residenziali:

  • Dimensioni del pool di proxy – maggiore è il numero di IP, meglio è consentire una rotazione costante senza ripetizioni. Preferisco le reti con oltre 10 milioni di IP.

  • Diversità di localizzazione – i proxy che abbracciano diverse regioni geografiche appaiono più umani.

  • Diversità dell'ASN – Diffondere gli IP su molte reti ISP è meglio che raggrupparli su pochi.

  • Screening della reputazione – il provider proxy dovrebbe inserire nella lista nera gli IP errati già taggati da PerimeterX.

  • Frequenza di rotazione – Gli IP residenziali dovrebbero essere cambiati il ​​più spesso possibile, anche ad ogni richiesta.

Approvvigionandoci da pool ampi e diversificati di IP residenziali, nascondiamo efficacemente i nostri scraper su larga scala.

Evita gli IP dei data center

Non utilizzo mai proxy di data center o IP di hosting cloud per lo scraping poiché sono facilmente riconosciuti da PerimeterX come infrastruttura di automazione. Attenersi esclusivamente ai proxy residenziali è fondamentale.

Attenzione ai provider di hosting

Molti VPS e provider di web hosting hanno avuto i loro intervalli IP profilati da PerimeterX. Evito di usarli come origini di scraping anche con i proxy.

Modelli di rotazione proxy

Quando si ruotano i proxy, è importante non ruotare secondo uno schema riconoscibile. Utilizzo algoritmi di randomizzazione per selezionare gli IP proxy in modo realistico e non deterministico.

Sfide del browser

Captcha e altre sfide interattive utilizzate da PerimeterX rappresentano un ostacolo per gli scraper. Ecco alcuni modi comprovati per superarli:

Esternalizzare la risoluzione dei CAPTCHA

Servizi come Anti-Captcha e 2Captcha consentono di risolvere istantaneamente migliaia di CAPTCHA sfruttando risolutori umani. Utilizzo le loro API per trasmettere e risolvere le sfide:

// Detect CAPTCHA
if(page.url().includes(‘captcha‘)) {

  // Pass to 2Captcha API
  const solution = await solver.solveRecaptcha(page.url());

  // Enter CAPTCHA solution
  await page.type(‘#captcha‘, solution);

  // Continue scraping
  // ...

}

Ciò consente la risoluzione automatizzata senza che il raschietto stesso debba riconoscere immagini o testo.

Sfide del browser senza testa

Per le sfide interattive avanzate come fare clic su un pulsante specifico, utilizzo Puppeteer per completare l'azione in modo programmatico:

// Identify challenge button
const button = await page.$(‘#challengeButton‘);

// Click the button
await button.click();

Poiché Puppeteer controlla un browser reale, può completare attività interattive invece di uno scraping puramente parametrico con strumenti come Axios.

Comportamenti realistici

Implemento anche il movimento naturale del mouse, lo scorrimento e i ritardi durante il completamento delle sfide per apparire più simili a quelli umani:

// Move mouse towards button
await page.mouse.move(x, y); 

// Scroll to button  
await page.evaluate(_ => {
  window.scrollBy(0, 100);
});

// Brief delay
await page.waitFor(500);

// Click button
await page.click(‘#challengeButton‘);

Ciò aiuta a rafforzare l'illusione dell'interazione umana.

Quando tutto il resto fallisce ...

Nei rari casi in cui le sfide sono semplicemente troppo avanzate, ricorro all’utilizzo di servizi di scraping commerciali che gestiscono CAPTCHA e altre mitigazioni dei bot dietro le quinte. Ciò consente di concentrarsi sull'estrazione dei dati senza preoccuparsi dell'evasione di PerimeterX.

Considerazioni finali

Attraverso una vasta esperienza nell'aggirare le protezioni PerimeterX per i clienti, ho sviluppato tecniche collaudate utilizzando proxy, browser, modelli di comportamento e altri strumenti per mantenere gli scraper inosservati.

La chiave è imitare gli utenti reali il più fedelmente possibile in ogni dimensione analizzata da PerimeterX: impronte digitali del dispositivo, modelli di comportamento, caratteristiche dell'ambiente e interazioni di sfida.

Combinando i metodi descritti in questa guida di oltre 3000 parole, puoi prendere il sopravvento su PerimeterX ed estrarre dati da migliaia di siti Web facendo affidamento sulla mitigazione dei bot: un proxy esperto e un veterano del web scraping come me lo fa con successo ogni singolo giorno.

Spero che questi suggerimenti ti siano stati utili: felice raschiamento!

Partecipa alla conversazione

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *