Sem acesso a sites ou a todos os URLs: o mapa de permissões entre dez extensões de scraping

Última atualização em August 17, 2026
Sem acesso a sites ou a todos os URLs: o mapa de permissões entre dez extensões de scraping
Resumo com IA
Toda extensão do Chrome traz um manifest.json que expõe boa parte do seu teto de capacidades no navegador: APIs solicitadas, padrões de host, scripts de conteúdo estáticos, permissões opcionais e conexões externas permitidas. É um arquivo público dentro do pacote que você instala. Ele não prova quais dessas capacidades o código realmente usa em execução, o que sai da máquina ou qual acesso a contas acontece por meio de um login web separado. Analisei as dez extensões de scraping e automação de navegador selecionadas para esta auditoria, incluindo a da Thunderbit, que é nossa. A diferença entre elas é grande.

Toda extensão do Chrome traz um manifest.json, e esse arquivo revela boa parte do teto de capacidades no nível do navegador: APIs solicitadas, padrões de host, scripts de conteúdo estáticos, permissões opcionais e conexões externas permitidas. Trata-se de um arquivo público dentro do pacote que você instala. Ele não prova quais capacidades declaradas o código em execução realmente usa, o que sai da máquina, nem quais acessos a contas acontecem por meio de um login web separado.

Analisei as dez extensões de scraping e automação de navegador selecionadas para este levantamento, incluindo a Thunderbit, que é nossa. A diferença entre elas é grande. Uma não declara acesso permanente a nenhum site. Outra declara treze permissões, incluindo clipboardRead. A Thunderbit é a única extensão deste conjunto que declara debugger, uma capacidade ampla de conexão via CDP com um perfil de risco diferente de acesso à página, OAuth ou scripts fornecidos pelo usuário.

Nada disso é acusação. Uma permissão ampla muitas vezes é a única forma honesta de construir um recurso específico, e uma permissão estreita pode simplesmente significar que o produto faz menos. O ponto é que a diferença é enorme, está publicada e nunca entra numa tabela comparativa.

Como isso foi feito

Cada extensão foi baixada como .crx diretamente do endpoint de atualização do Google — o mesmo URL usado pelo próprio Chrome — e depois descompactada e analisada. Nenhuma extensão foi instalada e nenhum código de extensão foi executado. Isto é uma leitura de um arquivo JSON.

Os downloads foram espaçados em cerca de uma solicitação a cada dois segundos. Cada .crx, seu SHA-256 e o manifest.json extraído foram preservados como artefatos. A Thunderbit passou pelo mesmo script que as outras nove, sem caminho especial, então sua linha foi derivada exatamente da mesma forma.

A análise usa duas classes de evidência e as mantém separadas:

  • Comportamento estático declarado: padrões de host e entradas de content_scripts, incluindo matches, run_at e all_frames.
  • Capacidade disponível para o código em execução: APIs nomeadas em permissions ou optional_permissions. Essas declarações mostram o que o código poderia solicitar ou invocar, não que o faça.

Não é atribuído nenhum ranking ordinal de "mais poderoso". debugger, userScripts, acesso amplo a hosts, escopos OAuth, acesso à área de transferência e mensagens externas expõem tipos diferentes de dados e exigem pré-condições diferentes. Compará-los exige um modelo de ameaça que esta auditoria apenas do manifesto não fornece.

Os tamanhos abaixo são totais descompactados em MiB (2²⁰ bytes), somados a partir das entradas ZIP.

Em 2026-07-29. Extensões são atualizadas; verifique novamente antes de citar.

O que dez manifestos declaram

Measured results chart: Declared permission strings

Referência oficial: guia do Chrome para declaração de permissões.

ExtensãoVersãoDescompactadoArquivosPermissõesAcesso a sitesAcessa file://
Axiom.ai5.1.037,1 MiB2328http://*/* + https://*/*
Table Capture11.0.4121,1 MiB1154 (+3 opcionais)<all_urls>
Magical3.119.116,8 MiB39513 (+2 opcionais)<all_urls>
Thunderbit (ours)4.6.415,9 MiB788 reconhecidas (+1 string não reconhecida em array: commands)<all_urls>
Clay for Chrome1.0.06,3 MiB516*://*/* (injeta apenas no próprio domínio)
Listly0.9.63,5 MiB847http://*/*, https://*/*, file:///*.html
Hexomatic1.8.42,7 MiB372apenas domínios próprios
Agenty2.9.72,2 MiB494nenhum declarado
Clip to Clay1.8.00,7 MiB1642 domínios nomeados
TexAu v21.6.60,3 MiB12614 domínios nomeados

Mais duas estavam na lista de candidatas e não aparecem na tabela, por motivos que valem ser reportados separadamente.

A diferença é uma escolha de design, não efeito de tamanho

Agenty não declara permissões de host e não traz nenhum content script. Suas quatro permissões são activeTab, scripting, identity e identity.email. activeTab é a mais restrita: ela concede acesso à aba atual somente depois que você clica na extensão e apenas até navegar para outro lugar. Nada roda nas suas páginas a menos que você acione a extensão. Em 2,2 MiB.

Axiom.ai declara http://*/* e https://*/*, injeta content scripts que correspondem a <all_urls> e se descompacta em 37,1 MiB distribuídos por 232 arquivos — dezessete vezes o tamanho da Agenty, com acesso permanente a todas as páginas que você visita.

A Hexomatic se aproxima da Agenty: duas permissões (storage, tabs), nenhuma permissão de host e scripts de conteúdo restritos aos seus dois próprios domínios.

Clay for Chrome apresenta uma terceira configuração que vale separar: ela declara *://*/* como permissão de host, mas injeta content scripts apenas no próprio domínio. A capacidade permanente é ampla; o comportamento automático é restrito. Uma tabela de permissões sozinha mistura essas coisas.

Cinco das dez podem alcançar arquivos no seu disco

file:/// não é um site. É o seu sistema de arquivos local renderizado numa aba do navegador — um PDF que você abriu, uma exportação HTML, uma fatura baixada.

Referência oficial: documentação de match-pattern do Chrome.

Três extensões dizem isso explicitamente. Duas chegam lá sem nomear o esquema: <all_urls> inclui o esquema file:.

ExtensãoComo alcança file://Nomeia file:// no manifesto?Onde
Magicalcorresponde a file:///* — qualquer arquivo local que o Chrome renderize, não só HTML — em quatro de suas seis entradas de content scriptcontent scripts e web_accessible_resources
Listlycorresponde a file:///*.htmlcontent scripts
Table Capturecontent scripts com <all_urls>, e também nomeia o esquemaweb_accessible_resources
Axiom.aiapenas por força do curinga <all_urls>em nenhum lugar
Thunderbit (ours)apenas por força do curinga <all_urls>em nenhum lugar

http://*/* e https://*/* não cobrem file://; <all_urls> e *://*/* também diferem nesse ponto. As cinco aqui são as que, por um caminho ou outro, alcançam esse esquema — não como consequência de terem escolhido uma forma de curinga específica.

O Chrome coloca tudo isso atrás do controle por extensão "Allow access to file URLs", que vem desativado por padrão, então a declaração é um pedido, não uma concessão. Cinco de dez é a contagem honesta, e duas dessas cinco nunca escrevem file:// em lugar nenhum no manifesto: Axiom.ai e a nossa.

Essa contagem inclui web_accessible_resources, não apenas content scripts e permissões de host. A Table Capture nomeia file://*/* ali; omitir esse bloco colocaria indevidamente a extensão entre as que alcançam arquivos sem nomear o esquema.

Permissões que você não vê até serem solicitadas

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

optional_permissions são declaradas antecipadamente, mas solicitadas em tempo de execução, então não aparecem no prompt de instalação. Duas extensões usam isso, e uma delas é relevante.

Extensãooptional_permissionsA que importa
Table CaptureuserScripts, downloads, identityuserScripts pode executar scripts fornecidos pelo usuário em contextos da página depois que a barreira de usuário do Chrome é ativada
Magicaldownloads, webRequestwebRequest observa o tráfego de rede

userScripts fica ausente até ser solicitado, e é invisível para quem lê uma contagem de permissões.

Ela também tem uma barreira que o restante das permissões desta auditoria não tem, e omiti-la a superestimaria. Declarar userScripts não basta para usá-la: o Chrome exige uma ação explícita do usuário primeiro. Antes do Chrome 138, isso era o Developer Mode, ativado globalmente em chrome://extensions. A partir do Chrome 138, é um controle por extensão Allow User Scripts na própria página de detalhes daquela extensão, desativado por padrão. Então, numa instalação comum, a capacidade é declarada e inerte. A afirmação precisa é condicional: a Table Capture pode disponibilizar a API userScripts depois que o usuário ativa a barreira do Chrome. Esta auditoria não mediu com que frequência os usuários visitam essa página de configurações ou ativam o controle.

Nenhuma das duas está oculta; ambas aparecem no manifesto. Uma tabela que ignora o bloco opcional subestima dois produtos.

Tempo de injeção, não só escopo

O como um content script é injetado recebe pouca atenção e muda o quadro. document_start é o gancho mais cedo que o Chrome oferece; all_frames alcança embeds de terceiros.

Tudo no conjunto que injeta estaticamente em todos os frames, em ordem de tempo declarado:

Extensãorun_atall_framesPadrão de correspondência do content script
Table Capturedocument_start<all_urls>
Listlydocument_startfile:///*.html mais todo http e https
Axiom.aidocument_startapenas domínios próprios
Clay for Chromedocument_startapenas domínios próprios
Thunderbit (ours)document_end<all_urls>
Magicaldocument_idlefile:///* mais http e https amplos
TexAudocument_idle (não definido)quatorze padrões nomeados

Table Capture e Listly usam o gancho mais cedo em padrões amplos. Axiom.ai e Clay for Chrome usam o mesmo tempo, mas apenas em seus próprios domínios — mesma agressividade, alvo restrito.

Para declarações estáticas, <all_urls> mais all_frames é o teto de amplitude de correspondência, e tanto Table Capture quanto Thunderbit ficam nesse ponto. O tempo declarado difere: Table Capture usa document_start; o content script estático da Thunderbit usa document_end. APIs em tempo de execução são uma classe separada de capacidade e não podem ser inferidas desta tabela.

Contar permissões é uma métrica ruim de resumo. A Table Capture declara quatro permissões — menos que a maioria aqui — e injeta em document_start em todos os frames sobre <all_urls>, além de userScripts quando solicitado.

Quem está autorizado a se comunicar com a extensão

externally_connectable controla quais páginas web ou outras extensões podem enviar mensagens diretamente para o service worker da extensão. Seu padrão não é intuitivo.

Omitir a chave é a configuração permissiva. O padrão do Chrome quando externally_connectable está ausente é que qualquer extensão pode se conectar, mas nenhuma página web pode. Declarar isso é a forma de restringir.

Lendo assim, a tabela se inverte:

ExtensãoDeclaração de externally_connectableQuem pode enviar mensagens
AgentyomitidoPadrão permissivo — qualquer extensão pode se conectar, nenhuma página web pode
Clay for ChromeomitidoPadrão permissivo — qualquer extensão pode se conectar, nenhuma página web pode
Clip to ClayomitidoPadrão permissivo — qualquer extensão pode se conectar, nenhuma página web pode
ListlyomitidoPadrão permissivo — qualquer extensão pode se conectar, nenhuma página web pode
Table CaptureomitidoPadrão permissivo — qualquer extensão pode se conectar, nenhuma página web pode
TexAuomitidoPadrão permissivo — qualquer extensão pode se conectar, nenhuma página web pode
Thunderbit (ours)omitidoPadrão permissivo — qualquer extensão pode se conectar, nenhuma página web pode
Hexomaticoito IDs de extensão e seis origens webAbre ambos os canais a partir de uma base fechada
Axiom.aisete origens web, sem idsCanal de extensão fechado, sete páginas web abertas
Magical{"ids": [], "matches": []}A única extensão aqui que fecha explicitamente os dois canais

A regra do Chrome tem dois níveis. Na referência do manifesto:

SituaçãoQuem pode se conectar
a chave inteira está ausente"all extensions can connect, but no web pages can connect"
chave presente, ids não definido ou []"no extensions or apps can connect"
chave presente, matches não definido ou []"no web pages can connect"

O padrão permissivo se aplica à ausência da chave inteira. Depois que a chave existe, ambos os subcampos começam fechados e nomear valores amplia cada canal.

Axiom.ai declara a chave apenas com matches. Logo, seu ids fica não definido, o que significa que nenhuma extensão pode enviar mensagens para ela — o canal de extensão está fechado, não aberto. O que ela abriu foram sete origens web, das quais apenas uma é um domínio da própria Axiom: duas são terceiros não atribuíveis (*://*.tgwc.space/*, *://*.bitmachine.co.uk/*) e o restante é localhost, 0.0.0.0, um host de Google APIs e uma grande plataforma social em que ela não opera.

Hexomatic abre o canal de extensão para oito IDs nomeados. Com a chave presente, o padrão inicial é zero extensões; nomear oito amplia isso para oito. Seus seis matches ampliam o outro canal a partir de nenhum, e dois deles são http://localhost:8000/* e http://localhost:3000/* via HTTP puro — qualquer coisa respondendo nessas portas na máquina do usuário entra na allowlist.

Sete das dez omitem a chave por completo, inclusive a nossa, e essas sete ficam no padrão permissivo para mensagens entre extensões. Duas extensões fecham esse canal: Magical explicitamente com ids: [], e Axiom.ai ao declarar a chave e nunca mencionar ids. Magical é a única que fecha ambos.

Essa última linha é o motivo para ler manifestos em vez de contar permissões. A mesma extensão pode ser ampla em um eixo e a mais restrita do conjunto em outro.

O eixo que ninguém conta: escopos OAuth

Um manifesto pode carregar um bloco oauth2, e os escopos dentro dele dão acesso às suas contas em outras empresas — um tipo de alcance diferente de tudo acima, e que nenhuma contagem de permissões reflete.

Referência oficial: lista de escopos OAuth 2.0 do Google.

ExtensãoEscopos oauth2 solicitados
Axiom.aiopenid, email, profile, auth/drive, auth/spreadsheets
Table Captureauth/spreadsheets, auth/userinfo.email
Agentyopenid, email, profile
As outras sete, inclusive a nossanenhum declarado

https://www.googleapis.com/auth/drive é o escopo amplo. O Google oferece um escopo mais restrito, drive.file, que concede acesso apenas aos arquivos que o próprio app cria ou que o usuário seleciona explicitamente; auth/drive permite ver, editar, criar e excluir em todo o Drive do usuário. auth/spreadsheets tem a mesma abrangência para todas as planilhas que a conta alcança. Tanto Axiom.ai quanto Table Capture combinam um escopo de conta Google com acesso a páginas em <all_urls>.

Há duas limitações no que essa tabela prova. Um escopo é solicitado, não concedido — o Google exibe uma tela de consentimento e o usuário pode recusar, e a extensão talvez nunca chame a API. Além disso, o manifesto só enxerga OAuth feito pelo fluxo identity do Chrome; uma extensão que o leve para uma página web de autenticação não declararia nada aqui. Os sete zeros significam "não solicitado neste arquivo", e não "sem acesso à sua conta Google" — inclusive no nosso caso, razão pela qual este eixo é reportado, e não reivindicado como estreiteza.

Nossa própria extensão, na mesma escala

A Thunderbit 4.6.4 passou pelo mesmo parser de manifesto que as outras nove. O pacote tem 15,9 MiB descompactados em 78 arquivos.

Comportamento estático declarado: <all_urls> aparece nas permissões de host e nas correspondências de content script. O script estático roda em all_frames em document_end. Como <all_urls> inclui file:, o manifesto pode alcançar arquivos locais depois que o usuário ativa o controle de acesso a arquivos do Chrome. A Thunderbit também omite externally_connectable, então o padrão do Chrome permite mensagens de qualquer extensão, mas de nenhuma página web.

Teto de capacidade em tempo de execução: o array permissions contém nove strings: activeTab, commands, debugger, offscreen, scripting, sidePanel, storage, tabGroups e tabs. O Chrome reconhece oito delas como permissões; commands é uma chave de manifesto de nível superior e não tem efeito como entrada nesse array. A Thunderbit é a única extensão do conjunto que declara debugger, capaz de anexar CDP a uma aba. O manifesto também disponibiliza scripting para registro em tempo de execução. Essas APIs criam capacidades além da linha estática de document_end, mas uma leitura do manifesto não permite concluir que a Thunderbit invoque um método específico de CDP ou registre um script em um momento anterior específico.

Essa distinção bloqueia várias comparações tentadoras, mas inválidas. A ausência de uma permissão mais estreita, como cookies, não limita o que um código com debugger poderia acessar. A ausência de clipboardRead não prova que o acesso à área de transferência seja impossível. Por outro lado, a presença de debugger não é evidência de que esses caminhos sejam usados. Responder a qualquer uma dessas perguntas exige inspeção do código-fonte ou rastreamento em tempo de execução, e nenhum dos dois foi realizado.

Neste instrumento, a Thunderbit é ampla no acesso estático a sites, única neste conjunto por declarar debugger, e segue o padrão do Chrome para mensagens entre extensões. Não existe um único ranking de "mais forte" porque a auditoria não fornece um modelo de ameaça comum para CDP, OAuth, userScripts, área de transferência e acesso a hosts.

O design contido que ninguém vende

TexAu tem 0,3 MiB — a menor aqui por um fator de dois — e nomeia quatorze sites específicos em vez de usar um curinga: redes sociais, uma plataforma para desenvolvedores, plataformas de publicação, um produto de chat, um provedor de dados empresariais e o próprio domínio. Seus content scripts correspondem exatamente aos mesmos quatorze.

Você pode ler esse manifesto e saber com precisão onde a extensão atua. Ele também é uma divulgação do produto — a lista de alvos diz mais claramente para que a ferramenta serve do que o marketing.

A troca é real: uma lista nomeada não consegue raspar um site que não esteja nela, e cada novo alvo exige um novo lançamento. Mas "quatorze domínios nomeados" e "todo URL que existe" são propostas muito diferentes, e só uma delas é legível.

Dois produtos que não eram o que a lista dizia

A extensão da Captain Data não é distribuída publicamente. O endpoint de atualização do Google retorna HTTP 204 com corpo vazio para o ID da extensão dela — a resposta típica de algo que a loja não serve anonimamente. Já a página da listagem foi servida anonimamente — HTTP 200, 509.829 bytes. O que a captura não conseguiu encontrar ali foi uma versão, uma data de última atualização ou uma contagem de instalações; as anotações do próprio script dizem que um nulo ali é evidência fraca, e nenhum bloqueio de login foi observado. O ID é real e de primeira parte, então a leitura mais provável é distribuição apenas por link ou não listada, mas não consegui distinguir isso de uma remoção da loja e não vou chutar.

Dataflow Kit não tem nenhuma extensão do Chrome. O site descreve um app web hospedado, com seleção ponto a ponto e uma API REST. Mesmo assim, ele havia sido incluído numa lista de extensões para Chrome — que é normalmente como essas listas são montadas.

Obsolescência e alcance, já que ambos são fáceis de verificar

Os metadados da loja acrescentam contexto de seleção de produto além das permissões. Os mesmos campos foram capturados para todas as extensões em 2026-07-30.

ExtensãoVersão na lojaÚltima atualizaçãoFaixa de instalações
Thunderbit (ours)4.6.428 de julho de 2026200.000
Listly0.9.625 de julho de 2026100.000
Axiom.ai5.1.020 de julho de 2026100.000
Table Capture11.0.4126 de junho de 2026200.000
Magical3.119.14 de abril de 2026200.000
Agenty2.9.78 de fevereiro de 202610.000
TexAu1.6.620 de agosto de 20257.000
Clay for Chrome1.0.09 de abril de 202510.000
Clip to Clay1.8.08 de abril de 20251.000
Hexomatic1.8.46 de setembro de 20243.000
Captain Datanão servido publicamente

Três produtos não lançam há mais de um ano, e a Hexomatic há quase dois. Para extensões isso importa mais do que para bibliotecas: o Chrome tem lançamentos estáveis cerca de uma vez a cada quatro semanas, e a própria plataforma de extensões continua mudando sob elas. userScripts mudou sua barreira de usuário no Chrome 138; uma extensão lançada pela última vez em 2024 foi construída sob um conjunto de regras diferente daquele que o navegador agora aplica.

Duas coisas que esta tabela não é. Contagens de instalação são agrupadas pelo Google — 1.000 / 3.000 / 7.000 / 10.000 / 100.000 / 200.000 — portanto servem para comparar ordens de grandeza e nada mais fino, e vários produtos divulgam números maiores em seu próprio marketing. Uma data recente é um fato sobre publicação, não um veredito sobre qualidade de manutenção ou risco de permissão.

Um subproduto útil: a versão da loja corresponde à versão do manifesto em todos os dez pacotes analisados. Os arquivos CRX que esta auditoria analisou são os que a loja está servindo hoje, não cópias antigas.

A frescura altera o quanto uma seleção merece acompanhamento; não altera a semântica do manifesto. Uma extensão de domínio nomeado atualizada há um ano ainda pode expor menos superfície de página do que uma extensão com curinga lançada ontem. O pacote mais novo ainda pode ser a melhor escolha operacional se acompanhar as mudanças do Chrome com rapidez. Para uma shortlist, use a data da loja para decidir o que retestar e, depois, use o manifesto para decidir o que exige uma revisão mais cuidadosa de capacidades. Não transforme as duas colunas numa única pontuação.

O que um manifesto não diz

Uma permissão declarada é um teto, não um comportamento. <all_urls> significa que uma extensão pode ler todas as páginas. Não significa que lê, nem que algo sai da sua máquina. Estabelecer o que realmente acontece exige observar o tráfego de rede em tempo de execução — um trabalho diferente, não feito aqui, e nada acima deve ser lido como evidência de abuso.

Leitura relacionada: experimento de testabilidade de extensão do Chrome.

Três limites adicionais:

  • O Chrome impõe barreiras a muita coisa. O acesso a arquivos vem desativado por padrão; activeTab é deliberadamente restrita; permissões opcionais exigem um prompt em tempo de execução; o usuário vê uma lista de permissões na instalação.
  • Permissões amplas muitas vezes são necessárias. Uma ferramenta cujo trabalho é "extrair uma tabela de qualquer página em que você esteja" não pode funcionar a partir de uma lista de domínios nomeados. Escopo estreito às vezes é disciplina e às vezes é apenas um produto menor.
  • Uma versão, um dia. Todos os números são do pacote servido em 2026-07-29.

Correções materiais na análise

As contagens publicadas usam três regras que são fáceis de errar ao escrever um parser rápido de manifesto. Primeiro, <all_urls> inclui o esquema file:, mas o Chrome mantém o acesso real a arquivos atrás de um controle ativado pelo usuário. Segundo, web_accessible_resources.matches precisa ser examinado junto com content scripts e permissões de host; é ali que a Table Capture nomeia explicitamente file://*/*. Terceiro, externally_connectable tem padrões diferentes dependendo de a chave inteira estar ausente ou existir com um subcampo vazio. As tabelas acima aplicam essas regras de forma consistente.

A contagem de permissões da Thunderbit também distingue strings brutas de permissões reconhecidas pelo Chrome. Seu array tem nove entradas, mas commands pertence ao nível superior, então a contagem efetiva usada aqui é oito permissões reconhecidas mais uma string não reconhecida. Por fim, declarações estáticas de content_scripts não são evidência de que o código chame scripting.registerContentScripts ou um método de CDP. Essas possibilidades aparecem apenas como capacidade em tempo de execução, nunca como comportamento observado. Os manifestos brutos, os hashes CRX e a saída do parser devem ser vinculados em um apêndice da publicação para que os leitores possam auditar essas normalizações sem confiar apenas no texto.

Para uma decisão real de instalação, compare pelo menos quatro dimensões separadamente: quais páginas estão no escopo por padrão, qual ação explícita do usuário libera mais alcance, quais APIs do navegador ou da conta ficam disponíveis e quais chamadores externos podem enviar mensagens para a extensão. O modelo activeTab da Agenty, o userScripts com barreira da Table Capture, o escopo Drive da Axiom.ai e a declaração debugger da Thunderbit não são pontos numa mesma escala linear. São respostas diferentes para perguntas de ameaça diferentes.

Aqui está essa comparação aplicada a quatro designs propositalmente diferentes:

ExtensãoEscopo de página visível no manifestoBarreira adicionalCapacidade não relacionada à página nesta auditoriaPostura de chamadores externos
Agentynenhuma permissão de host nem content script estáticousuário aciona activeTab na aba atualpermissões de identidade do Chromechave omitida: qualquer extensão pode se conectar, nenhuma página web pode
Table Capturescripts estáticos em <all_urls> em todos os frames em document_startacesso a arquivos desativado por padrão; userScripts precisa da barreira separada do ChromeuserScripts, downloads e identity opcionaischave omitida: qualquer extensão pode se conectar, nenhuma página web pode
Axiom.aiacesso amplo a HTTP e HTTPS; scripts estáticos em document_start em seus próprios domíniosconsentimento OAuth para os escopos Google solicitadosescopos OAuth de Drive e Sheets declaradoschamadores de extensão fechados; sete origens web abertas
Thunderbitacesso a hosts em <all_urls> e scripts estáticos em todos os frames em document_endacesso a arquivos desativado por padrão; anexar debugger tem comportamento visível controlado pelo Chromedebugger, scripting, tabs e APIs relacionadas do navegador declaradaschave omitida: qualquer extensão pode se conectar, nenhuma página web pode

Essa tabela ainda não produz um vencedor. O alcance estreito de página da Agenty não diz nada sobre o que o backend dela faz com os dados enviados. Os escopos de conta da Axiom.ai não são comparáveis a uma extensão lendo a página atual. A declaração userScripts da Table Capture fica inerte até o usuário ativar sua barreira separada. A permissão debugger da Thunderbit expõe uma ampla superfície de controle do navegador, mas o manifesto não revela quais domínios ou métodos de CDP o código chama. Cada linha diz o que inspecionar em seguida: tráfego de rede em tempo de execução, código-fonte, fluxo de consentimento ou traces de API do navegador.

System diagram: How to read your own

A mesma separação importa ao ler o prompt de instalação do Chrome. Uma contagem bruta de permissões não mostra timing, alcance por frame, escopo OAuth, web_accessible_resources ou uma chave externally_connectable omitida. Por outro lado, uma declaração ampla não prova coleta ou exfiltração. O resultado útil de uma auditoria de manifesto é um plano de teste em tempo de execução priorizado: identifique a superfície de dados, observe a barreira do usuário e então verifique se o caminho declarado é de fato usado.

Como ler o seu próprio

Leitura relacionada: guia de automação de navegador.

  1. chrome://extensionsDetails mostra o acesso a sites concedido e permite mudar para on click tudo o que não precisar de acesso permanente. Isso reduz a metade de acesso a sites do que foi mostrado acima. Não altera mensagens de entrada (externally_connectable alcança o service worker independentemente) nem permissões no nível do navegador. A declaração debugger da Thunderbit é relevante aqui. A documentação de segurança de extensões do próprio Chromium diz que a API debugger "may in some cases also sidestep other typical restrictions, such as host permissions or file access", então definir o acesso ao site como "on click" não limita o que ela pode alcançar. E esse controle também não afeta tabs, webNavigation, clipboardRead, downloads nem nada em optional_permissions.
  2. Para o arquivo bruto, o pacote fica no diretório Extensions/<id>/<version>/ do Chrome. Leia seis campos: permissions, optional_permissions, host_permissions, content_scripts (os matches, run_at e all_frames dentro deles), externally_connectable — lembrando que uma chave ausente é permissiva para chamadores de extensão — e web_accessible_resources, cujos matches podem nomear esquemas que os content scripts nunca nomeiam. O último campo da Thunderbit tem duas entradas <all_urls> expondo index.html e dois scripts empacotados para qualquer origem, com use_dynamic_url: false, o que permite a uma página testar se esses URLs estáveis da extensão resolvem.
  3. Verifique a data de última atualização da listagem contra a versão atual do Chrome.

Divulgação e recursos: este artigo é publicado pela Thunderbit, cuja extensão está incluída na mesma tabela e no mesmo parser. Nosso pilar de scrapers open source cobre ferramentas que não são extensões.

Experimente a Thunderbit para extração de dados da web

Resumo curto

Dez extensões de scraping e automação, incluindo a nossa, foram lidas a partir dos seus próprios manifestos.

Agenty não declara acesso a sites nem content scripts, funcionando apenas na aba em que você clica nela, em 2,2 MiB. Axiom.ai declara qualquer URL HTTP e HTTPS em 37,1 MiB. Magical declara treze permissões, incluindo clipboardRead — e também é a única extensão aqui que fecha completamente as mensagens de entrada. Table Capture declara apenas quatro permissões, e injeta em document_start em todos os frames sobre <all_urls> — o mesmo teto de correspondência que a nossa atinge, mas mais cedo — além de userScripts sob solicitação. TexAu é a menor, e nomeia o maior número de alvos — quatorze padrões em treze propriedades distintas. Ela não é a única a nomeá-los: Clip to Clay declara dois (clay.com e um site de terceiros), e Hexomatic e Clay for Chrome nomeiam seus próprios domínios. TexAu é a única cuja lista nomeada é majoritariamente de sites de outras pessoas. Cinco das dez podem alcançar arquivos no seu disco, e duas delas — Axiom.ai e a nossa — sem nunca escrever file://.

A Thunderbit, a nossa, fica na ponta mais ampla: <all_urls> tanto para acesso a host quanto para injeção estática, além de debugger, que nenhuma outra extensão deste conjunto declara. Ela fica no padrão do Chrome que permite mensagens de qualquer extensão e alcança file:// depois que a barreira de acesso a arquivos do Chrome é ativada.

Uma declaração é um teto, não um comportamento, e nada disso mostra abuso. Mas está publicado, é gratuito para verificar, e a diferença entre os dois extremos é maior do que qualquer coisa nas páginas de produto.

Experimente a Thunderbit para extração de dados da web Get Started Free

FAQs

Uma permissão ampla significa que a extensão está fazendo algo errado — e por que não basta contar permissões? Não, e porque a contagem deixa de fora duas coisas. <all_urls> significa que uma extensão pode ler todas as páginas que você visita; isso não diz nada sobre o que ela faz nem se algo sai da sua máquina, e uma ferramenta criada para extrair dados de qualquer página realmente não pode funcionar a partir de uma lista de domínios nomeados. O achado é a diferença de alcance, não má conduta — estabelecer o comportamento real exige análise de tráfego em tempo de execução, o que esta auditoria não fez. Quanto à contagem: configurações de injeção não são permissões, então a Table Capture declara quatro enquanto injeta em document_start, em all_frames, correspondendo a <all_urls>. E optional_permissions nem aparecem no prompt de instalação — a Table Capture pode solicitar userScripts em tempo de execução, o que permite executar scripts arbitrários fornecidos pelo usuário em contextos da página, e a Magical pode solicitar webRequest.

Qual delas pede menos? Agenty: quatro permissões, nenhuma permissão de host, nenhum content script. Ela depende de activeTab, que concede acesso à aba atual apenas depois que você clica na extensão e só até navegar para outro lugar. A Hexomatic vem em seguida, com duas permissões e content scripts limitados aos próprios domínios.

Como uma extensão pode alcançar meus arquivos locais sem declarar file://? Porque <all_urls> inclui o esquema file:. Listly, Magical e Table Capture nomeiam padrões file:// explicitamente — Magical em seus content scripts e Table Capture em web_accessible_resources. Axiom.ai e Thunderbit alcançam isso pelo curinga sem mencionar o esquema em lugar nenhum. http://*/* e https://*/* não cobrem file://. O Chrome mantém o acesso a arquivos desativado por padrão, atrás de um controle por extensão, então a declaração é um pedido, não uma concessão.

O que é externally_connectable, e por que omiti-lo é a opção permissiva? Ele nomeia as origens web ou IDs de extensão autorizados a enviar mensagens ao service worker de uma extensão. O padrão do Chrome quando a chave está ausente é que qualquer extensão pode se conectar e nenhuma página web pode. Sete dessas dez omitem isso, incluindo a Thunderbit. Com a chave presente, Hexomatic abre o canal de extensão para oito IDs nomeados; Axiom.ai abre sete origens web e mantém o canal de extensão fechado; Magical declara listas vazias para ambos, fechando os dois canais.

O que o próprio manifesto da Thunderbit declara? <all_urls> para acesso a host e injeção estática de content script, em all_frames em document_end; 15,9 MiB em 78 arquivos; e nove strings no array de permissões. Oito são permissões reconhecidas: activeTab, debugger, offscreen, scripting, sidePanel, storage, tabGroups e tabs. commands é uma chave de manifesto de nível superior e não tem efeito nesse array. Nenhuma outra extensão deste conjunto declara debugger. A Thunderbit também alcança file:// via <all_urls> depois que a barreira de acesso a arquivos do Chrome é ativada, e omite externally_connectable. O comportamento em tempo de execução não foi executado, então a auditoria não afirma quais métodos de CDP ou de scripting a extensão realmente chama.

Ke
Ke
CTO na Thunderbit | Cientista de Dados Sênior e Especialista em ML Com quase uma década de experiência em machine learning e data science, Ke Shen é ex-aluno da Columbia University e foi Cientista de Dados Sênior na Walmart Labs. Com profunda experiência, reconhecida pelos pares, em Python, R, Java e Estatística, ele compartilha insights testados em batalha sobre como levar algoritmos complexos de IA da teoria à arquitetura pronta para produção.
Sumário
Thunderbit · Agente de dados web com IA

Extraia dados de qualquer página em 1 clique

Aprovado por mais de 250.000 usuários
plano gratuito disponível
Da página web para a planilha
Descreva o que você precisa — o Agente de IA da Thunderbit extrai e exporta para Excel, Google Sheets, Airtable ou Notion. Comece grátis.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week