Le migliori estensioni e i migliori software per il web scraping nel 2025 | Thunderbit

Ultimo aggiornamento il August 19, 2026
Le migliori estensioni e i migliori software per il web scraping nel 2025 | Thunderbit
Riassunto AI
Ogni estensione Chrome include un file manifest.json che definisce gran parte del suo perimetro di capacità a livello browser: API richieste, pattern degli host, script di contenuto statici, permessi opzionali e connessioni esterne consentite. È un file pubblico nel pacchetto che installi. Non dimostra quali capacità dichiarate vengano usate a runtime, cosa esca dal dispositivo o quali accessi all’account passino attraverso un login web separato. Ho analizzato le dieci estensioni per scraping e automazione del browser selezionate per questa verifica, inclusa Thunderbit, che è la nostra. La differenza è enorme.

Ogni estensione Chrome include un file manifest.json, che definisce gran parte del suo perimetro di capacità a livello browser: API richieste, pattern host, content script statici, permessi opzionali e connessioni esterne consentite. È un file pubblico incluso nel pacchetto che installi. Non dimostra quali capacità dichiarate il codice a runtime utilizzi davvero, quali dati escano dal dispositivo o quale accesso all’account avvenga tramite un login web separato.

Ho analizzato le dieci estensioni per scraping e automazione browser selezionate per questo audit, inclusa quella di Thunderbit, che è la nostra. Le differenze sono notevoli. Una non dichiara alcun accesso permanente ai siti. Un’altra dichiara tredici permessi, incluso clipboardRead. Thunderbit è l’unica estensione di questo gruppo a dichiarare debugger, una capacità ampia di aggancio al CDP con un profilo di rischio diverso dall’accesso alle pagine, da OAuth o dagli script forniti dall’utente.

Non si tratta di un’accusa. Un permesso esteso è spesso l’unico modo corretto per realizzare una certa funzione, e un set ristretto può semplicemente indicare che il prodotto fa meno cose. Il punto è che la differenza è enorme, è pubblica e non compare mai in una tabella comparativa.

Come è stato fatto

Ogni estensione è stata scaricata come .crx dall’endpoint di aggiornamento di Google — lo stesso URL usato da Chrome — poi è stata estratta e analizzata. Nessuna estensione è stata installata e nessun codice di estensione è stato eseguito. Si tratta della lettura di un file JSON.

I download sono stati eseguiti con un ritmo di circa una richiesta ogni due secondi. Ogni .crx, il relativo SHA-256 e il manifest.json estratto sono conservati come evidenze. Thunderbit è passato attraverso lo stesso script delle altre nove, senza canali separati, quindi la sua riga è derivata esattamente come le altre.

L’analisi usa due classi di evidenza, mantenute separate:

  • Comportamento statico dichiarato: pattern host e voci content_scripts, inclusi matches, run_at e all_frames.
  • Capacità disponibili al codice runtime: API nominate in permissions o optional_permissions. Queste dichiarazioni mostrano ciò che il codice potrebbe richiedere o invocare, non ciò che effettivamente fa.

Non viene assegnato alcun punteggio ordinale di tipo “più potente”. debugger, userScripts, accesso ampio agli host, scope OAuth, accesso agli appunti e messaggistica esterna espongono dati diversi e richiedono condizioni iniziali diverse. Confrontarli richiederebbe un modello di minaccia che questo audit basato solo sul manifesto non fornisce.

Le dimensioni riportate sotto sono i totali estratti in MiB (2²⁰ byte), sommati dagli elementi ZIP.

Aggiornato al 2026-07-29. Le estensioni si aggiornano; verifica di nuovo prima di citare.

Cosa dichiarano dieci manifest

Measured results chart: Declared permission strings

Riferimento ufficiale: guida di Chrome alla dichiarazione dei permessi.

EstensioneVersioneEstrattoFilePermessiAccesso ai sitiRaggiunge file://
Axiom.ai5.1.037.1 MiB2328http://*/* + https://*/*
Table Capture11.0.4121.1 MiB1154 (+3 opzionali)<all_urls>
Magical3.119.116.8 MiB39513 (+2 opzionali)<all_urls>
Thunderbit (nostra)4.6.415.9 MiB788 riconosciuti (+1 stringa array non riconosciuta: commands)<all_urls>
Clay for Chrome1.0.06.3 MiB516*://*/* (inietta solo sul proprio dominio)
Listly0.9.63.5 MiB847http://*/*, https://*/*, file:///*.html
Hexomatic1.8.42.7 MiB372solo domini propri
Agenty2.9.72.2 MiB494nessuno dichiarato
Clip to Clay1.8.00.7 MiB1642 domini nominati
TexAu v21.6.60.3 MiB12614 domini nominati

Altri due erano nella lista dei candidati ma non sono in tabella, per motivi che meritano un approfondimento a parte.

Le differenze sono una scelta di progettazione, non un effetto della dimensione

Agenty non dichiara permessi host e non include alcun content script. I suoi quattro permessi sono activeTab, scripting, identity e identity.email. activeTab è il permesso più ristretto: concede accesso alla scheda corrente solo dopo che fai clic sull’estensione, e solo fino a quando non cambi pagina. Nulla viene eseguito sulle tue pagine a meno che tu non lo attivi. Il tutto in 2.2 MiB.

Axiom.ai dichiara http://*/* e https://*/*, inietta content script che corrispondono a <all_urls> e si scompatta in 37.1 MiB distribuiti su 232 file — diciassette volte la dimensione di Agenty, con accesso permanente a ogni pagina visitata.

Hexomatic è più vicino ad Agenty: due permessi (storage, tabs), nessun permesso host, content script limitati ai suoi due domini.

Clay for Chrome presenta un terzo profilo che vale la pena distinguere: dichiara *://*/* come permesso host, ma inietta content script solo sul proprio dominio. La capacità permanente è ampia; il comportamento automatico è ristretto. Una tabella dei permessi da sola tende a confondere questi due aspetti.

Cinque delle dieci possono raggiungere i file sul tuo disco

file:/// non è un sito web. È il tuo file system locale visualizzato in una scheda del browser — un PDF aperto, un export HTML, una fattura scaricata.

Riferimento ufficiale: documentazione Chrome sui match pattern.

Tre estensioni lo dichiarano esplicitamente. Due lo raggiungono senza nominarlo: <all_urls> include lo schema file:.

EstensioneCome raggiunge file://Nomina file:// nel manifest?Dove
Magicalcorrisponde a file:///* — ogni file locale che Chrome può renderizzare, non solo HTML — in quattro delle sue sei voci di content scriptcontent script e web_accessible_resources
Listlycorrisponde a file:///*.htmlcontent script
Table Capturecontent script su <all_urls>, e nomina anche lo schemaweb_accessible_resources
Axiom.aisemplicemente in virtù del wildcard <all_urls>da nessuna parte
Thunderbit (nostra)semplicemente in virtù del wildcard <all_urls>da nessuna parte

http://*/* e https://*/* non coprono file://; anche <all_urls> e *://*/* differiscono su questo punto. Le cinque qui sono quelle le cui dichiarazioni raggiungono lo schema in un modo o nell’altro — non per il tipo di wildcard scelto, ma per come è definito il permesso.

Chrome blocca tutto questo dietro un interruttore per-estensione “Consenti accesso agli URL dei file”, che è disattivato di default, quindi la dichiarazione è una richiesta e non una concessione. Cinque su dieci è il conteggio corretto, e due di queste cinque non scrivono mai file:// in alcun punto del manifest: Axiom.ai e la nostra estensione.

Questo conteggio include anche web_accessible_resources, non solo content script e permessi host. Table Capture nomina file://*/* in quella sezione; ometterla lo collocherebbe erroneamente tra le estensioni i cui manifest raggiungono i file senza nominare lo schema.

Permessi invisibili finché non vengono richiesti

System diagram: Permissions you can't see until they're requested

Gli optional_permissions sono dichiarati in anticipo ma richiesti a runtime, quindi non compaiono nel prompt di installazione. Due estensioni li usano, e una è particolarmente importante.

Estensioneoptional_permissionsQuello che conta davvero
Table CaptureuserScripts, downloads, identityuserScripts può eseguire script forniti dall’utente nel contesto della pagina dopo che il gate utente di Chrome è stato abilitato
Magicaldownloads, webRequestwebRequest osserva il traffico di rete

userScripts non è disponibile finché non viene richiesto, e non è visibile a chiunque legga solo il numero dei permessi.

Ha anche un gate che gli altri permessi di questo audit non hanno, e ometterlo lo sopravvaluterebbe. Dichiarare userScripts non basta per usarlo: Chrome richiede prima un’azione esplicita dell’utente. Prima di Chrome 138 era la modalità Sviluppatore, attivata globalmente in chrome://extensions. Da Chrome 138 in poi è un interruttore per-estensione Consenti User Scripts nella pagina dettagli di quell’estensione, disattivato di default. Quindi, per un’installazione normale, la capacità è dichiarata ma inattiva. La formulazione corretta è condizionale: Table Capture può rendere disponibile l’API userScripts dopo che l’utente abilita il gate di Chrome. Questo audit non ha misurato quante persone aprano quella pagina o attivino l’opzione.

Nessuno dei due è nascosto; entrambi sono nel manifest. Una tabella che ignora il blocco opzionale sottostima due prodotti.

Tempistica dell’iniezione, non solo ampiezza

Non conta solo dove viene iniettato un content script, ma anche quando. document_start è il punto più precoce offerto da Chrome; all_frames raggiunge gli embed di terze parti.

Tutto ciò che nel gruppo inietta staticamente in tutti i frame, in ordine di timing dichiarato:

Estensionerun_atall_framesPattern di content script
Table Capturedocument_start<all_urls>
Listlydocument_startfile:///*.html più tutto http e https
Axiom.aidocument_startsolo domini propri
Clay for Chromedocument_startsolo domini propri
Thunderbit (nostra)document_end<all_urls>
Magicaldocument_idlefile:///* più http e https ampi
TexAudocument_idle (non impostato)quattordici pattern nominati

Table Capture e Listly eseguono il punto di aggancio più precoce su pattern molto ampi. Axiom.ai e Clay for Chrome usano lo stesso timing, ma solo sui propri domini: stessa aggressività, bersaglio ristretto.

Per le dichiarazioni statiche, <all_urls> più all_frames è il limite massimo di ampiezza del matching, e sia Table Capture sia Thunderbit si collocano lì. Il timing dichiarato però è diverso: Table Capture usa document_start; il content script statico di Thunderbit usa document_end. Le API runtime sono una classe di capacità separata e non possono essere inferite da questa tabella.

Il conteggio dei permessi è una pessima statistica riassuntiva. Table Capture dichiara quattro permessi — meno della maggior parte qui — ma inietta a document_start in tutti i frame su <all_urls>, oltre a userScripts su richiesta.

Chi può inviare messaggi all’estensione

externally_connectable controlla quali pagine web o altre estensioni possono inviare messaggi direttamente allo script di background di un’estensione. Il comportamento predefinito è controintuitivo.

Omettere la chiave è l’impostazione permissiva. Il default di Chrome quando externally_connectable è assente è che qualsiasi estensione può connettersi, mentre nessuna pagina web può farlo. Dichiararla serve a limitare.

Letto così, il quadro si capovolge:

EstensioneDichiarazione externally_connectableChi può inviarle messaggi
AgentyomessaDefault permissivo — qualsiasi estensione può connettersi, nessuna pagina web può
Clay for ChromeomessaDefault permissivo — qualsiasi estensione può connettersi, nessuna pagina web può
Clip to ClayomessaDefault permissivo — qualsiasi estensione può connettersi, nessuna pagina web può
ListlyomessaDefault permissivo — qualsiasi estensione può connettersi, nessuna pagina web può
Table CaptureomessaDefault permissivo — qualsiasi estensione può connettersi, nessuna pagina web può
TexAuomessaDefault permissivo — qualsiasi estensione può connettersi, nessuna pagina web può
Thunderbit (nostra)omessaDefault permissivo — qualsiasi estensione può connettersi, nessuna pagina web può
Hexomaticotto ID di estensione e sei origini webApre entrambi i canali partendo da una base chiusa
Axiom.aisette origini web, senza idsCanale estensione chiuso, sette pagine web aperte
Magical{"ids": [], "matches": []}L’unica estensione qui che chiude esplicitamente entrambi i canali

La regola di Chrome ha due livelli. Dalla documentazione del manifest:

SituazioneChi può connettersi
l’intera chiave è assente"all extensions can connect, but no web pages can connect"
chiave presente, ids non impostato o []"no extensions or apps can connect"
chiave presente, matches non impostato o []"no web pages can connect"

L’impostazione permissiva dipende dall’assenza dell’intera chiave. Una volta che la chiave è presente, entrambi i sotto-campi partono chiusi e i valori nominati ampliano ciascun canale.

Axiom.ai dichiara la chiave con il solo matches. Il suo ids è quindi non impostato, il che significa che nessuna estensione può inviargli messaggi — il canale estensione è chiuso, non lasciato aperto. Ciò che apre sono sette origini web, solo una delle quali è un dominio Axiom: due sono terze parti non attribuibili (*://*.tgwc.space/*, *://*.bitmachine.co.uk/*) e le restanti sono localhost, 0.0.0.0, un host Google APIs e una grande piattaforma social che non gestisce.

Hexomatic apre il canale estensione verso otto ID nominati. Con la chiave presente, la base è zero estensioni; nominarne otto la porta a otto. I suoi sei matches ampliano l’altro canale da nessuno, e due di questi sono http://localhost:8000/* e http://localhost:3000/* su HTTP puro — qualsiasi servizio in ascolto su quelle porte sulla macchina dell’utente rientra nella allowlist.

Sette delle dieci omettono la chiave del tutto, inclusa la nostra, e queste sette sono quelle che restano sul default permissivo per la messaggistica estensione-verso-estensione. Due estensioni chiudono quel canale: Magical in modo esplicito con ids: [], e Axiom.ai dichiarando la chiave e non menzionando mai ids. Magical è l’unica che chiude entrambi.

Questa ultima frase è il motivo per leggere i manifest invece di contare i permessi. La stessa estensione può essere ampia su un asse e la più restrittiva del gruppo su un altro.

L’asse che nessuno conta: gli scope OAuth

Un manifest può includere un blocco oauth2, e gli scope al suo interno danno accesso agli account presso altre aziende — un tipo di portata diverso da tutto quanto visto sopra, e che nessun conteggio dei permessi riflette.

Riferimento ufficiale: lista degli scope OAuth 2.0 di Google.

EstensioneScope oauth2 richiesti
Axiom.aiopenid, email, profile, auth/drive, auth/spreadsheets
Table Captureauth/spreadsheets, auth/userinfo.email
Agentyopenid, email, profile
Le altre sette, inclusa la nostranessuno dichiarato

https://www.googleapis.com/auth/drive è quello più ampio. Google offre uno scope più ristretto, drive.file, che concede accesso solo ai file creati dall’app o scelti esplicitamente dall’utente; auth/drive consente di vedere, modificare, creare ed eliminare contenuti in tutto Drive dell’utente. auth/spreadsheets ha la stessa forma per ogni foglio di calcolo raggiungibile dall’account. Sia Axiom.ai sia Table Capture associano uno scope di account Google all’accesso alle pagine <all_urls>.

Due limiti a ciò che questa tabella prova. Uno scope è richiesto, non concesso — Google mostra una schermata di consenso e l’utente può rifiutare, e l’estensione potrebbe non chiamare mai l’API. Inoltre il manifest vede solo OAuth gestito tramite il flusso identity di Chrome; un’estensione che ti rimanda invece a una pagina web di accesso non dichiarerebbe nulla qui. Gli zeri delle sette voci significano “non richiesto in questo file”, non “nessun accesso al tuo account Google” — inclusa la nostra estensione, ed è per questo che questo asse viene riportato invece di essere presentato come prova di ristrettezza.

La nostra estensione, sulla stessa scala

Thunderbit 4.6.4 è passato attraverso lo stesso parser di manifest delle altre nove. Il pacchetto è di 15.9 MiB estratti su 78 file.

Comportamento statico dichiarato: <all_urls> compare sia nei permessi host sia nei match dei content script. Lo script statico gira in all_frames a document_end. Poiché <all_urls> include file:, il manifest può raggiungere file locali dopo che l’utente abilita l’interruttore di Chrome per l’accesso ai file. Thunderbit omette anche externally_connectable, quindi il default di Chrome consente messaggi da qualsiasi estensione ma da nessuna pagina web.

Tetto di capacità runtime: l’array permissions contiene nove stringhe: activeTab, commands, debugger, offscreen, scripting, sidePanel, storage, tabGroups e tabs. Chrome riconosce otto di queste come permessi; commands è una chiave del manifest di primo livello e non ha effetto come voce di questo array. Thunderbit è l’unica estensione nel gruppo a dichiarare debugger, che può agganciare il CDP a una scheda. Il manifest rende inoltre disponibile scripting per la registrazione a runtime. Queste API creano capacità oltre la riga statica document_end, ma una lettura del manifest non può stabilire se Thunderbit invochi un particolare metodo CDP o registri uno script in un momento precedente specifico.

Questa distinzione blocca diversi confronti allettanti ma non validi. L’assenza di un permesso più ristretto come cookies non limita ciò a cui potrebbe accedere il codice con debugger. L’assenza di clipboardRead non prova che l’accesso agli appunti sia impossibile. Al contrario, la presenza di debugger non è prova che quei percorsi vengano effettivamente usati. Per rispondere a una qualsiasi di queste domande servono ispezione del sorgente o tracing runtime, nessuno dei quali è stato eseguito.

Su questo strumento, Thunderbit è ampio nell’accesso statico ai siti, unico nel gruppo per aver dichiarato debugger, e resta al default di Chrome per la messaggistica estensione-verso-estensione. Non esiste un singolo ranking di “più forte” perché l’audit non fornisce un modello di minaccia comune tra CDP, OAuth, userScripts, appunti e accesso agli host.

Il design misurato che nessuno pubblicizza

TexAu pesa 0.3 MiB — il più piccolo qui per un fattore di due — e nomina quattordici siti specifici invece di usare un wildcard: social network, una piattaforma per sviluppatori, piattaforme editoriali, un prodotto di chat, un fornitore di dati aziendali e il proprio dominio. I suoi content script corrispondono esattamente agli stessi quattordici.

Puoi leggere questo manifest e sapere con precisione dove l’estensione è attiva. È anche una forma di dichiarazione del prodotto: l’elenco dei target dice in modo più chiaro a cosa serve lo strumento rispetto al marketing.

Il compromesso è reale: una lista nominata non può fare scraping su un sito che non è incluso, e ogni nuovo target richiede una release. Ma “quattordici domini nominati” ed “ogni URL esistente” sono due proposte molto diverse, e solo una delle due è leggibile.

Due prodotti che non erano ciò che la lista diceva

L’estensione di Captain Data non è distribuita pubblicamente. L’endpoint di aggiornamento di Google restituisce HTTP 204 con body vuoto per il suo ID estensione — la risposta tipica di qualcosa che lo store non serve in forma anonima. La pagina del listing invece era servita in modo anonimo — HTTP 200, 509.829 byte. Ciò che la cattura non è riuscita a trovare lì dentro è un numero di versione, una data di ultimo aggiornamento o un conteggio installazioni; le note dello script indicano che un valore nullo in quel punto è una prova debole, e non è stata osservata alcuna schermata di login. L’ID è reale e first-party, quindi la lettura più probabile è una distribuzione via link o non elencata, ma non ho potuto distinguerla da una rimozione dal catalogo e non farò ipotesi.

Dataflow Kit non ha alcuna estensione Chrome. Il suo sito descrive una web app ospitata con selezione point-and-click e una REST API. Era comunque finita in una shortlist di estensioni Chrome — che è in genere così che queste liste vengono costruite.

Obsolescenza e diffusione, visto che entrambe sono facili da verificare

I metadati dello store aggiungono contesto alla selezione dei prodotti oltre ai permessi. Gli stessi campi sono stati rilevati per ogni estensione il 2026-07-30.

EstensioneVersione nello storeUltimo aggiornamentoFascia installazioni
Thunderbit (nostra)4.6.428 luglio 2026200.000
Listly0.9.625 luglio 2026100.000
Axiom.ai5.1.020 luglio 2026100.000
Table Capture11.0.4126 giugno 2026200.000
Magical3.119.14 aprile 2026200.000
Agenty2.9.78 febbraio 202610.000
TexAu1.6.620 agosto 20257.000
Clay for Chrome1.0.09 aprile 202510.000
Clip to Clay1.8.08 aprile 20251.000
Hexomatic1.8.46 settembre 20243.000
Captain Datanon servita pubblicamente

Tre prodotti non rilasciano una nuova versione da oltre un anno, e Hexomatic da quasi due. Per le estensioni questo conta più che per le librerie: Chrome rilascia una versione stabile circa ogni quattro settimane e la piattaforma delle estensioni cambia continuamente sotto i nostri piedi. userScripts ha spostato il suo gate utente in Chrome 138; un’estensione pubblicata l’ultima volta nel 2024 è stata costruita su un insieme di regole diverso da quello che il browser applica oggi.

Due cose che questa tabella non è. I conteggi di installazione sono raggruppati da Google — 1.000 / 3.000 / 7.000 / 10.000 / 100.000 / 200.000 — quindi servono solo a confrontare ordini di grandezza, e nulla di più fine; inoltre alcuni prodotti pubblicizzano numeri più alti nei propri materiali. Una data recente è un fatto sulla pubblicazione, non un giudizio sulla qualità della manutenzione o sul rischio dei permessi.

Un effetto collaterale utile: la versione nello store corrisponde alla versione del manifest in tutti e dieci i pacchetti analizzati. I file CRX letti da questo audit sono quelli che lo store sta servendo oggi, non copie vecchie.

L’attualità modifica quanto follow-up meriti una selezione; non cambia la semantica del manifest. Un’estensione con domini nominati e aggiornata un anno fa può comunque esporre meno superficie di pagina di una con wildcard pubblicata ieri. Il pacchetto più recente può ancora essere la scelta operativa migliore se segue rapidamente i cambiamenti di Chrome. Per una shortlist, usa la data dello store per decidere cosa ritestare, poi usa il manifest per capire cosa richiede una revisione di capacità più approfondita. Non trasformare le due colonne in un solo punteggio.

Cosa non ti dice un manifest

Un permesso dichiarato è un tetto, non un comportamento. <all_urls> significa che un’estensione può leggere ogni pagina. Non significa che lo faccia, né che qualcosa lasci il tuo dispositivo. Stabilire cosa accade davvero richiede il monitoraggio del traffico di rete a runtime — un lavoro diverso, non svolto qui — e nulla di quanto scritto sopra deve essere letto come prova di uso scorretto.

Approfondimento correlato: esperimento sulla testabilità delle estensioni Chrome.

Tre ulteriori limiti:

  • Chrome mette molti di questi aspetti dietro un gate. L’accesso ai file è disattivato di default; activeTab è volutamente ristretto; i permessi opzionali richiedono un prompt runtime; l’utente vede un elenco dei permessi durante l’installazione.
  • I permessi ampi sono spesso necessari. Uno strumento il cui compito è “estrarre una tabella da qualsiasi pagina tu stia visitando” non può funzionare con una allowlist di domini nominati. Un ambito ristretto a volte è disciplina, altre volte è semplicemente un prodotto più limitato.
  • Una versione, un giorno. Ogni dato proviene dal pacchetto servito il 2026-07-29.

Correzioni materiali nell’analisi

I conteggi pubblicati usano tre regole facili da sbagliare quando si scrive in fretta un parser di manifest. Primo, <all_urls> include lo schema file:, ma Chrome mantiene l’accesso reale ai file dietro un toggle controllato dall’utente. Secondo, web_accessible_resources.matches va esaminato insieme ai content script e ai permessi host; è lì che Table Capture nomina esplicitamente file://*/*. Terzo, externally_connectable ha default diversi a seconda che l’intera chiave sia assente oppure presente con un sotto-campo vuoto. Le tabelle qui sopra applicano queste regole in modo coerente.

Il totale dei permessi di Thunderbit distingue anche tra stringhe grezze e permessi Chrome riconosciuti. Il suo array contiene nove voci, ma commands appartiene al livello superiore, quindi il conteggio effettivo usato qui è di otto permessi riconosciuti più una stringa non riconosciuta. Infine, le dichiarazioni statiche content_scripts non sono una prova che il codice invochi scripting.registerContentScripts o un metodo CDP. Quelle possibilità compaiono solo come capacità runtime, mai come comportamento osservato. I manifest grezzi, gli hash CRX e l’output del parser sono la traccia di audit per queste normalizzazioni, così i lettori non devono prendere il testo alla cieca.

Per una vera decisione di installazione, confronta almeno quattro dimensioni separatamente: quali pagine sono incluse di default, quale azione esplicita dell’utente sblocca maggiore portata, quali API browser o account diventano disponibili e quali soggetti esterni possono messaggiare l’estensione. Il modello activeTab di Agenty, userScripts protetto di Table Capture, lo scope Drive di Axiom.ai e la dichiarazione debugger di Thunderbit non sono punti su una stessa scala lineare. Sono risposte diverse a domande di minaccia diverse.

Ecco quel confronto applicato a quattro design volutamente differenti:

EstensioneAmbito pagina visibile nel manifestGate aggiuntivoCapacità non legata alle pagine in questo auditPostura dei chiamanti esterni
Agentynessun permesso host o content script staticol’utente attiva activeTab sulla scheda correntepermessi Chrome identitychiave omessa: qualsiasi estensione può connettersi, nessuna pagina web può
Table Capturescript statici su <all_urls> in tutti i frame a document_startl’accesso ai file è disattivato di default; userScripts richiede il gate utente separato di ChromeuserScripts, downloads e identity opzionalichiave omessa: qualsiasi estensione può connettersi, nessuna pagina web può
Axiom.aiaccesso wildcard HTTP e HTTPS; script statici a document_start sui propri dominiconsenso OAuth per gli scope Google richiestiscope OAuth Drive e Sheets dichiaratichiamanti estensione chiusi; aperte sette origini web
Thunderbitaccesso host <all_urls> e script statici in tutti i frame a document_endl’accesso ai file è disattivato di default; l’aggancio di debugger ha un comportamento visibile all’utente controllato da Chromedebugger, scripting, tabs e altre API browser dichiaratechiave omessa: qualsiasi estensione può connettersi, nessuna pagina web può

Anche questa tabella non produce un vincitore. L’accesso pagina permanente ristretto di Agenty non dice nulla su come il suo backend tratti i dati inviati. Gli scope account di Axiom.ai non sono paragonabili a un’estensione che legge la pagina corrente. La dichiarazione userScripts di Table Capture resta inattiva finché l’utente non abilita il suo gate separato. Il permesso debugger di Thunderbit espone una vasta superficie di controllo del browser, ma il manifest non rivela quali domini o metodi CDP usi il codice. Ogni riga ti dice cosa ispezionare dopo: traffico di rete runtime, codice sorgente, flusso di consenso o trace delle API browser.

System diagram: How to read your own

La stessa distinzione conta quando si legge il prompt di installazione di Chrome. Un semplice conteggio dei permessi non può mostrare tempistica, ampiezza sui frame, scope OAuth, web_accessible_resources o una chiave externally_connectable omessa. Al contrario, una dichiarazione ampia non è prova di raccolta o esfiltrazione. Il risultato utile di un audit del manifest è un piano di test runtime prioritizzato: identificare la superficie dati, annotare il gate utente e poi osservare se il percorso dichiarato viene effettivamente esercitato.

Come leggere il proprio

Approfondimento correlato: guida all’automazione browser.

  1. chrome://extensionsDettagli mostra l’accesso ai siti concesso e consente di impostarlo su al clic per tutto ciò che non richiede accesso permanente. Questo restringe la metà dell’accesso ai siti di quanto riportato sopra. Non modifica la messaggistica in ingresso (externally_connectable raggiunge comunque il service worker), né i permessi a livello browser. La dichiarazione debugger di Thunderbit è rilevante qui. La documentazione di sicurezza delle estensioni di Chromium afferma che l’API debugger “in some cases also sidestep other typical restrictions, such as host permissions or file access”, quindi impostare l’accesso ai siti su “al clic” non limita ciò a cui può arrivare. Inoltre il controllo non tocca tabs, webNavigation, clipboardRead, downloads o qualunque cosa in optional_permissions.
  2. Per il file grezzo, il pacchetto si trova nella directory di Chrome Extensions/<id>/<version>/. Leggi sei campi: permissions, optional_permissions, host_permissions, content_scripts (inclusi matches, run_at e all_frames), externally_connectable — ricordando che una chiave assente è permissiva per i chiamanti delle estensioni — e web_accessible_resources, i cui matches possono nominare schemi che i content script non nominano mai. L’ultimo campo di Thunderbit ha due voci <all_urls> che espongono index.html e due script bundlizzati a ogni origine, con use_dynamic_url: false, il che consente a una pagina di verificare se quegli URL stabili dell’estensione si risolvono.
  3. Controlla la data dell’ultimo aggiornamento del listing rispetto alla versione corrente di Chrome.

Disclosure e risorse: questo articolo è pubblicato da Thunderbit, la cui estensione è inclusa nella stessa tabella e nello stesso parser. Il nostro pilastro open source per gli scraper copre gli strumenti non basati su estensione.

Prova Thunderbit per l’estrazione di dati web

La versione breve

Dieci estensioni per scraping e automazione, compresa la nostra, sono state lette partendo dai loro manifest.

Agenty dichiara nessun accesso ai siti e nessun content script, lavorando solo sulla scheda che stai guardando quando fai clic, in 2.2 MiB. Axiom.ai dichiara ogni URL HTTP e HTTPS su 37.1 MiB. Magical dichiara tredici permessi inclusi clipboardRead — ed è anche l’unica estensione qui che chiude completamente la messaggistica in ingresso. Table Capture dichiara appena quattro permessi, e inietta a document_start in tutti i frame su <all_urls> — lo stesso tetto di corrispondenza che raggiunge anche la nostra estensione, ma prima — più userScripts su richiesta. TexAu è la più piccola, e nomina il maggior numero di target — quattordici pattern distribuiti su tredici proprietà distinte. Non è l’unica a nominarli: Clip to Clay ne dichiara due (clay.com e un sito di terze parti), e Hexomatic e Clay for Chrome nominano i propri domini. TexAu è l’unica la cui lista nominata è in gran parte composta da siti altrui. Cinque delle dieci possono raggiungere i file sul tuo disco, e due di queste — Axiom.ai e la nostra — senza scrivere mai file://.

Thunderbit, la nostra, si colloca nel gruppo più ampio: <all_urls> sia per l’accesso host sia per l’iniezione statica, più debugger, che nessun’altra estensione di questo set dichiara. Resta al default di Chrome che consente messaggi da qualsiasi estensione, e raggiunge file:// dopo che è stato abilitato il gate utente di Chrome.

Una dichiarazione è un tetto, non un comportamento, e nulla di tutto questo dimostra un uso scorretto. Ma è pubblica, è gratuita da verificare, e la distanza tra i due estremi è più grande di qualsiasi cosa riportata nelle pagine prodotto.

Prova Thunderbit per l’estrazione di dati web Get Started Free

FAQ

Un permesso ampio significa che l’estensione stia facendo qualcosa di sbagliato — e perché contare i permessi non basta? No, e perché il conteggio perde due aspetti. <all_urls> significa che un’estensione può leggere ogni pagina che visiti; non dice nulla su ciò che fa davvero o su cosa esca dal tuo dispositivo, e uno strumento costruito per estrarre dati da qualsiasi pagina non può realisticamente funzionare con una lista di domini nominati. Il risultato che conta è la differenza tra i prodotti, non un illecito — per verificare il comportamento reale serve l’analisi del traffico runtime, che questo audit non ha eseguito. Quanto al conteggio: le impostazioni di iniezione non sono permessi, quindi Table Capture dichiara quattro permessi ma inietta a document_start, in all_frames, su <all_urls>. E gli optional_permissions non compaiono affatto nel prompt di installazione — Table Capture può richiedere userScripts a runtime, consentendo l’esecuzione di script arbitrari forniti dall’utente nei contesti di pagina, e Magical può richiedere webRequest.

Quale di queste chiede meno di tutte? Agenty: quattro permessi, nessun permesso host, nessun content script. Si basa su activeTab, che concede accesso alla scheda corrente solo dopo il clic sull’estensione e solo finché non cambi pagina. Hexomatic viene dopo, con due permessi e content script limitati ai propri domini.

Come può un’estensione raggiungere i miei file locali senza dichiarare file://? Perché <all_urls> include lo schema file:. Listly, Magical e Table Capture nominano esplicitamente pattern file:// — Magical nei content script e Table Capture in web_accessible_resources. Axiom.ai e Thunderbit lo raggiungono tramite il wildcard senza nominarlo in alcun punto. http://*/* e https://*/* non coprono file://. Chrome mantiene l’accesso ai file disattivato di default dietro un toggle per-estensione, quindi la dichiarazione è una richiesta e non una concessione.

Che cos’è externally_connectable e perché ometterlo è l’opzione permissiva? Indica quali origini web o ID di estensioni possono inviare messaggi allo script di background di un’estensione. Il default di Chrome quando la chiave è assente è che qualsiasi estensione possa connettersi e nessuna pagina web possa farlo. Sette di queste dieci la omettono, inclusa Thunderbit. Con la chiave presente, Hexomatic apre il canale estensione verso otto ID nominati; Axiom.ai apre sette origini web lasciando chiuso il canale estensione; Magical dichiara liste vuote per entrambi, chiudendo entrambi i canali.

Cosa dichiara il manifest di Thunderbit? <all_urls> per l’accesso host e per l’iniezione statica dei content script, in all_frames a document_end; 15.9 MiB distribuiti su 78 file; e nove stringhe nell’array dei permessi. Otto sono permessi riconosciuti: activeTab, debugger, offscreen, scripting, sidePanel, storage, tabGroups e tabs. commands è una chiave del manifest a livello superiore e non ha effetto in quell’array. Nessun’altra estensione di questo set dichiara debugger. Thunderbit raggiunge inoltre file:// tramite <all_urls> dopo che è stato abilitato il gate di accesso ai file di Chrome, e omette externally_connectable. Il comportamento runtime non è stato eseguito, quindi l’audit non afferma quali metodi CDP o di scripting l’estensione invochi davvero.

Ke
Ke
CTO di Thunderbit | Senior Data Scientist ed esperto di ML Con quasi un decennio di esperienza nel machine learning e nella data science, Ke Shen è un ex studente della Columbia University ed ex Senior Data Scientist presso Walmart Labs. Grazie a una profonda competenza, riconosciuta dai suoi pari, in Python, R, Java e statistica, condivide insight collaudati sul passaggio di algoritmi AI complessi dalla teoria a un'architettura pronta per la produzione.
Topics
Strumenti di Web ScrapingAI Web Scraper
Indice
Thunderbit · Agente AI per i dati web

Estrai dati da qualsiasi pagina in 1 clic

Scelto da oltre 250.000 utenti
piano gratuito disponibile
Dalla pagina web al foglio di calcolo
Descrivi ciò che ti serve — l’AI Agent di Thunderbit lo estrae ed esporta in Excel, Google Sheets, Airtable o Notion. Puoi iniziare gratis.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week