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
rebrowser-patches — Raccolta di patch per puppeteer e playwright per evitare il rilevamento dell'automazione e le perdite. Aiuta a evitare le pagine CAPTCHA di Cloudflare e DataDome. Facile da applicare/rimuovere, attivabile/disattivabile al bisogno. | Kitploit
Strumenti/GitHubGitHub/rebrowser/rebrowser-patches
CrawlerAnti-BotBypass CAPTCHA
GitHubrebrowser/rebrowser-patches

rebrowser-patches

Raccolta di patch per puppeteer e playwright per evitare il rilevamento dell'automazione e le perdite. Aiuta a evitare le pagine CAPTCHA di Cloudflare e DataDome. Facile da applicare/rimuovere, attivabile/disattivabile al bisogno.

Vedi Repository

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
Sito web
1.4k791 anno faRevisionato da Kitploit

🪄 Patch per un'automazione del browser non rilevabile

Questa repository contiene patch per migliorare le librerie di automazione web più popolari. Nello specifico, si rivolge ai pacchetti puppeteer e playwright.

Alcuni aspetti delle librerie di automazione o del comportamento del browser non possono essere modificati tramite impostazioni o opzioni da riga di comando. Per questo motivo risolviamo questi problemi applicando patch al codice sorgente della libreria. Sebbene questo approccio sia fragile e possa rompersi quando il codice sorgente delle librerie cambia nel tempo, l'obiettivo è mantenere questa repository con l'aiuto della community per tenere le patch aggiornate.

Ho davvero bisogno di patch?

Nella configurazione predefinita, Puppeteer e Playwright presentano alcune significative falle facili da rilevare. Non importa quanto siano buoni i tuoi proxy, le impronte digitali e gli script comportamentali: se non hai applicato le patch, sei solo una grande bandiera rossa per qualsiasi sito importante.

🕵️ Puoi testare facilmente la tua configurazione di automazione per le principali rilevazioni moderne con rebrowser-bot-detector (fonti e dettagli)

Prima delle patch 👎Dopo le patch 👍
primadopo

Esiste un sostituto drop-in semplice?

Se non vuoi sporcarti le mani con le patch e tutti i possibili errori, per te esiste una soluzione drop-in. Questi pacchetti hanno semplicemente applicato rebrowser-patches sopra il codice originale, nient'altro.

Puppeteer: rebrowser-puppeteer (src) e rebrowser-puppeteer-core (src)

Playwright (Node.js): rebrowser-playwright (src) e rebrowser-playwright-core (src)

Playwright (Python): rebrowser-playwright (src)

Il modo più semplice per iniziare a usarlo è modificare il tuo package.json per usare i nuovi pacchetti mantenendo il vecchio nome come alias. In questo modo non devi cambiare nessun codice sorgente della tua automazione. Ecco come fare:

  1. Apri package.json e sostituisci "puppeteer": "^23.3.1" e "puppeteer-core": "^23.3.1" con "puppeteer": "npm:rebrowser-puppeteer@^23.3.1" e "puppeteer-core": "npm:rebrowser-puppeteer-core@^23.3.1". Nota: 23.3.1 è solo un esempio, controlla l'ultima versione su npm.
  2. Esegui npm install (oppure yarn install)

Un altro modo è usare direttamente i nuovi pacchetti al posto di quelli originali. Ecco i passaggi da seguire:

  1. Apri package.json e sostituisci i pacchetti puppeteer e puppeteer-core con rebrowser-puppeteer e rebrowser-puppeteer-core. Non cambiare le versioni dei pacchetti, sostituisci solo i nomi.
  2. Esegui npm install (o yarn install)
  3. Trova e sostituisci nei tuoi script ogni menzione di puppeteer e puppeteer-core con rebrowser-puppeteer e rebrowser-puppeteer-core

🚀 Tutto qui! Visita semplicemente la pagina rebrowser-bot-detector e testa il tuo browser con le patch applicate.

Il nostro obiettivo è mantenere e supportare questi pacchetti sostitutivi drop-in con le ultime versioni, ma ci concentriamo soprattutto sulle versioni recenti; quindi, se stai ancora usando puppeteer 13.3.7 dei primi anni '90, potrebbe essere il momento giusto per aggiornare. C'è un'alta probabilità che non rompa nulla, dato che l'API è abbastanza stabile nel tempo.

Patch disponibili

Fix della falla Runtime.Enable

Le librerie di automazione più diffuse si affidano al comando CDP Runtime.Enable, che consente di ricevere eventi dal dominio Runtime.. Questo è fondamentale per gestire i contesti di esecuzione usati per valutare JavaScript nelle pagine, una funzionalità chiave per qualsiasi processo di automazione.

Tuttavia, esiste una tecnica che rileva l'utilizzo di questo comando, rivelando che il browser è controllato da software di automazione come Puppeteer o Playwright. Questa tecnica è usata da tutti i principali software anti-bot, come Cloudflare, DataDome e altri.

Abbiamo preparato un articolo completo sulla nostra indagine su questa falla, che puoi leggere nel nostro blog.

Per maggiori dettagli su questa tecnica, leggi il post del blog di DataDome: Come il nuovo Headless Chrome e il segnale CDP influenzano il rilevamento dei bot. In breve, si tratta di poche righe di JavaScript nella pagina che vengono chiamate automaticamente se Runtime.Enable è stato utilizzato.

La nostra correzione disabilita il comando automatico Runtime.Enable su ogni frame. Al suo posto, creiamo manualmente contesti con ID sconosciuti quando viene creato un frame. Poi, quando il codice deve essere eseguito, ci sono diversi modi per ottenere l'ID del contesto.

1. Crea un nuovo binding nel main world, invocalo e salva il relativo ID del contesto.

🟢 Pro: L'approccio definitivo che mantiene l'accesso al main world e funziona con i web worker e gli iframe. Non devi modificare nessuna parte del tuo codebase esistente.

🔴 Contro: Nessuno scoperto finora.

2. Crea un nuovo contesto isolato tramite Page.createIsolatedWorld e salva il suo ID.

🟢 Pro: Tutto il tuo codice verrà eseguito in un mondo isolato separato, impedendo agli script della pagina di rilevare le tue modifiche tramite MutationObserver e altre tecniche.

🔴 Contro: Non potrai accedere alle variabili e al codice del contesto principale. Sebbene questo sia necessario per alcuni casi d'uso, il contesto isolato funziona generalmente bene nella maggior parte degli scenari. Inoltre, i web worker non consentono di creare nuovi mondi, quindi non puoi eseguire il tuo codice all'interno di un worker. È un caso d'uso di nicchia, ma potrebbe essere rilevante in alcune situazioni. Esiste un workaround per questo problema: leggi Come accedere agli oggetti del contesto principale da un contesto isolato in Puppeteer & Playwright.

3. Chiama Runtime.Enable e poi immediatamente Runtime.Disable.

Questo attiva gli eventi Runtime.executionContextCreated, permettendoci di catturare l'ID del contesto corretto.

🟢 Pro: Avrai accesso completo al contesto principale.

🔴 Contro: C'è una piccola possibilità che durante questa breve finestra temporale la pagina chiami del codice che porta alla perdita. Il rischio è basso, poiché il codice di rilevamento viene solitamente chiamato durante azioni specifiche come pagine CAPTCHA o moduli di login/registrazione, in genere subito dopo il caricamento della pagina. La tua logica di business viene di solito chiamata un po' più tardi.

🎉 I nostri test mostrano che tutti questi approcci sono attualmente non rilevabili da Cloudflare o DataDome.

Nota: puoi modificare le impostazioni di questa patch al volo usando una variabile d'ambiente. Questo ti consente di passare facilmente tra versioni con patch e senza patch in base alla tua logica di business.

  • REBROWSER_PATCHES_RUNTIME_FIX_MODE=addBinding — tecnica addBinding (predefinita)
  • REBROWSER_PATCHES_RUNTIME_FIX_MODE=alwaysIsolated — esegui sempre tutti gli script in un contesto isolato
  • REBROWSER_PATCHES_RUNTIME_FIX_MODE=enableDisable — usa la tecnica Enable/Disable
  • REBROWSER_PATCHES_RUNTIME_FIX_MODE=0 — disabilita completamente la correzione per questa falla
  • REBROWSER_PATCHES_DEBUG=1 — abilita alcuni messaggi di debug

Ricorda che puoi impostare queste variabili in modi diversi, ad esempio nel codice:

root@kitploit:~
process.env.REBROWSER_PATCHES_RUNTIME_FIX_MODE = "alwaysIsolated"

oppure da riga di comando:

root@kitploit:~
REBROWSER_PATCHES_RUNTIME_FIX_MODE=alwaysIsolated node app.js

Cambia sourceURL in un nome di script generico

Di default, Puppeteer aggiunge //# sourceURL=pptr:... a ogni script in page.evaluate(). Un sito web remoto può rilevare questo comportamento e alzare bandiere rosse. Questa patch lo cambia in //# sourceURL=app.js. Puoi anche modificarlo tramite variabile d'ambiente:

root@kitploit:~
# usa un qualsiasi nome di file generico
REBROWSER_PATCHES_SOURCE_URL=jquery.min.js
# usa 0 per disabilitare completamente questa patch
REBROWSER_PATCHES_SOURCE_URL=0

Metodo per accedere alla connessione CDP del browser

A volte può essere molto utile accedere a una sessione CDP a livello di browser. Ad esempio, quando vuoi implementare un comando CDP personalizzato. Esiste un metodo page._client() che restituisce la sessione CDP per l'istanza della pagina corrente, ma non esiste un metodo analogo per l'istanza del browser. Questa patch aggiunge un nuovo metodo _connection() alla classe Browser, così puoi usarlo in questo modo:

root@kitploit:~
browser._connection().on('Rebrowser.addRunEvent', (params) => { ... })

Nota: non è rilevabile dagli script esterni del sito, è solo per tua comodità.

Cambia il nome predefinito del utility world

Il nome predefinito del utility world è '__puppeteer_utility_world__' + packageVersion. A volte potresti volerlo cambiare in qualcos'altro. Questa patch lo cambia in util e ti permette di personalizzarlo tramite variabile d'ambiente:

root@kitploit:~
REBROWSER_PATCHES_UTILITY_WORLD_NAME=customUtilityWorld
# usa 0 per disabilitare completamente questa patch
REBROWSER_PATCHES_UTILITY_WORLD_NAME=0

Questa variabile d'ambiente non può essere cambiata al volo: devi impostarla prima di eseguire lo script perché viene utilizzata nel momento in cui il modulo viene importato.

Prima della patch 👎Dopo la patch 👍
primadopo

Nota: non è rilevabile dagli script esterni del sito, ma Google potrebbe usare queste informazioni nel suo Chrome proprietario; non lo sappiamo mai.

Utilizzo

Questo pacchetto è progettato per essere eseguito su una libreria già installata. Installa la libreria, poi avvia il patcher, ed è tutto pronto.

Nella cartella root del tuo progetto, esegui:

root@kitploit:~
npx rebrowser-patches@latest patch --packageName puppeteer-core

Puoi facilmente annullare tutte le modifiche con questo comando:

root@kitploit:~
npx rebrowser-patches@latest unpatch --packageName puppeteer-core

Puoi anche applicare la patch a un pacchetto fornendo il percorso completo della sua cartella, ad esempio:

root@kitploit:~
npx rebrowser-patches@latest patch --packagePath /web/app/node_modules/puppeteer-core-custom

Puoi vedere tutte le opzioni da riga di comando eseguendo npx rebrowser-patches@latest --help, ma al momento c'è una sola patch per una sola libreria, quindi non devi configurare nulla.

⚠️ Tieni presente che dopo aver eseguito npm install o yarn install nella cartella del tuo progetto, potrebbe sovrascrivere tutte le modifiche delle patch. Dovrai eseguire di nuovo il patcher per mantenere le patch applicate.

Come aggiornare le patch?

Se hai già applicato le patch al tuo pacchetto e vuoi aggiornare all'ultima versione di rebrowser-patches, il modo più semplice è eliminare node_modules/puppeteer-core, poi eseguire npm install o yarn install --check-files, e infine eseguire npx rebrowser-patches@latest patch.

Come applicare le patch alle versioni Java/Python/.NET di Playwright?

Tutte queste versioni sono solo wrapper attorno alla versione Node.js di Playwright. Devi trovare la cartella driver all'interno del tuo pacchetto Playwright ed eseguire questa patch con --packagePath=$yourDriverFolder/$yourPlatform/package.

Supporto Puppeteer

✅ Ultima versione testata completamente: 24.8.1 (rilasciata il 2025-05-06)

Supporto Playwright

Le patch per Playwright includono:

  • Falla Runtime.enable: modalità addBinding e alwaysIsolated.
  • Possibilità di cambiare il nome del utility world tramite la variabile d'ambiente REBROWSER_PATCHES_UTILITY_WORLD_NAME.
  • Altre patch sono in arrivo, metti la stella e segui la repository.

Importante: il metodo page.pause() non funziona con la correzione attivata, richiede ulteriori indagini. Puoi semplicemente disabilitare completamente la correzione durante il debug usando la variabile d'ambiente REBROWSER_PATCHES_RUNTIME_FIX_MODE=0.

Queste patch funzionano per ora solo con Chrome. Se vuoi davvero usarle con WebKit o Firefox, apri una nuova issue.

✅ Ultima versione testata completamente: 1.52.0 (rilasciata il 2025-04-17)

Come usare rebrowser-puppeteer con puppeteer-extra?

Usa il metodo addExtra, ecco l'esempio:

root@kitploit:~
// before
import puppeteer from 'puppeteer-extra'

// after
import { addExtra } from 'puppeteer-extra'
import rebrowserPuppeteer from 'rebrowser-puppeteer-core'
const puppeteer = addExtra(rebrowserPuppeteer)

Segui il progetto

Stiamo attualmente sviluppando altre patch per migliorare la trasparenza dell'automazione web, che saranno rilasciate presto in questa repository. Ti chiediamo di sostenere il progetto cliccando su ⭐️ stella o sul pulsante watch.

💭 Se hai idee, pensieri o domande, non esitare a contattare il nostro team via email o usa la sezione issues.

La correzione non aiuta, vengo ancora bloccato 🤯

⚠️ È importante sapere che questa correzione da sola non renderà il tuo browser a prova di proiettile e non rilevabile. Devi considerare molti altri aspetti come proxy, un user-agent corretto e impronte digitali (canvas, WebGL) e altro ancora.

Tieni sempre presente: meno manipoli gli internals del browser tramite iniezioni JS, meglio è. Esistono modi per rilevare che oggetti interni come console, navigator e altri sono stati alterati da oggetti Proxy o da Object.defineProperty. È complicato, ma è sempre un gioco del gatto col topo.

Se hai provato di tutto e hai ancora problemi, prova a fare una domanda nella sezione issues o prendi in considerazione l'uso delle soluzioni cloud di Rebrowser.

Cos'è Rebrowser?

Questo pacchetto è sponsorizzato e mantenuto da Rebrowser. Ti permettiamo di scalare la tua automazione del browser e il web scraping nel cloud con centinaia di impronte digitali uniche.

I nostri browser cloud hanno ottimi tassi di successo e offrono funzionalità interessanti come notifiche se la tua libreria usa Runtime.Enable durante l'esecuzione o ha altre bandiere rosse che potrebbero essere migliorate. Crea un account oggi per essere invitato a testare la nostra piattaforma all'avanguardia e portare la tua attività di automazione al livello successivo.

Avvisi automatici

Comando patch su Windows

Quando provi a eseguire questo patcher su una macchina Windows, probabilmente incontrerai un errore perché il comando patch non viene trovato. Per risolvere, devi installare Git, che include patch.exe. Dopo averlo installato, devi aggiungerlo al tuo PATH:

root@kitploit:~
set PATH=%PATH%;C:\Program Files\Git\usr\bin\

Puoi verificare che patch.exe sia installato correttamente usando il seguente comando:

root@kitploit:~
patch -v

Ringraziamenti speciali

zfcsoftware/puppeteer-real-browser - idee generali e contributo alla community dell'automazione

Kaliiiiiiiiii-Vinyzu/patchright - set di patch per correggere le perdite di Playwright

kaliiiiiiiiii/brotector - alcuni test moderni, algoritmo per distinguere CDP dai devtools

prescience-data/harden-puppeteer - uno dei pionieri dell'esecuzione in un mondo isolato

puppeteer-extra-plugin-stealth - dove tutto è iniziato, un grande plauso a tutti i contributori e alla community 🙏 berstend e soci sono i GOAT

Esclusione di responsabilità

Non si accetta alcuna responsabilità per l'uso di questo software. Questo software è destinato esclusivamente a scopi educativi e informativi. Gli utenti dovrebbero usare questo software a proprio rischio. Gli sviluppatori del software non possono essere ritenuti responsabili per eventuali danni derivanti dall'uso di questo software. Questo software non è inteso ad aggirare alcuna misura di sicurezza, incluse, a titolo esemplificativo, CAPTCHA, sistemi anti-bot o altri meccanismi di protezione impiegati dai siti web. Il software non deve essere usato per scopi dannosi. Usando questo software, accetti questa clausola di esclusione della responsabilità e riconosci di utilizzare il software in modo responsabile e in conformità con tutte le leggi e i regolamenti applicabili.
Scarica lo strumento