Qué declaran realmente los 10 principales extensiones de scraping de Chrome

Última actualización: August 17, 2026
Qué declaran realmente los 10 principales extensiones de scraping de Chrome
Resumen con IA

Esta auditoría compara diez extensiones de scraping y automatización de Chrome a partir de sus manifiestos, no de su comportamiento en tiempo de ejecución. El análisis separa permisos, acceso a sitios, inyección de scripts, alcance de file://, optional_permissions, externally_connectable y scopes OAuth para mostrar que un conteo simple de permisos no basta para evaluar riesgo o capacidad. Thunderbit destaca por declarar debugger y acceso amplio a <all_urls>, mientras que otras extensiones presentan perfiles muy distintos pese a tamaños, permisos y alcances aparentemente similares.

Toda extensión de Chrome incluye un manifest.json que define una parte importante de su techo de capacidades a nivel navegador: APIs solicitadas, patrones de host, scripts de contenido estáticos, permisos opcionales y conexiones externas permitidas. Es un archivo público dentro del paquete que instalas. Pero no demuestra qué capacidades declaradas usa el código en tiempo de ejecución, qué datos salen del equipo o qué accesos a cuentas ocurren mediante un inicio de sesión web aparte.

Revisé las diez extensiones de scraping y automatización para navegador seleccionadas para esta auditoría, incluida la de Thunderbit, que es nuestra. El panorama es muy dispar. Una no declara acceso permanente a ningún sitio. Otra declara trece permisos, incluido clipboardRead. Thunderbit es la única extensión de este grupo que declara debugger, una capacidad amplia de adjunción a CDP con un perfil de riesgo distinto al acceso a páginas, OAuth o scripts aportados por el usuario.

Nada de eso es una acusación. Un permiso amplio suele ser la única forma honesta de construir cierta función, y uno más limitado puede significar simplemente que el producto hace menos cosas. La cuestión es que la diferencia es enorme, está publicada y nunca aparece en una tabla comparativa.

Cómo se hizo

Cada extensión se descargó como un .crx desde el propio endpoint de actualización de Google —la misma URL que usa Chrome—, luego se descomprimió y se analizó. No se instaló ninguna extensión ni se ejecutó código de ninguna de ellas. Esto es una lectura de un archivo JSON.

Las descargas se espaciaron aproximadamente a una solicitud cada dos segundos. Se conservan como artefactos cada .crx, su SHA-256 y el manifest.json extraído. Thunderbit pasó por el mismo script que las otras nueve, no por un canal especial, así que su fila se derivó exactamente igual que las demás.

El análisis usa dos clases de evidencia y las mantiene separadas:

  • Comportamiento estático declarado: patrones de host y entradas de content_scripts, incluidos matches, run_at y all_frames.
  • Capacidad disponible para el código en tiempo de ejecución: APIs nombradas en permissions o optional_permissions. Estas declaraciones muestran lo que el código podría pedir o invocar, no que lo haga.

No se asigna ningún puntaje ordinal de “más poderoso”. debugger, userScripts, el acceso amplio a hosts, los alcances OAuth, el acceso al portapapeles y la mensajería externa exponen datos distintos y requieren condiciones previas distintas. Compararlos exige un modelo de amenaza que esta auditoría basada solo en el manifiesto no proporciona.

Los tamaños de abajo son totales descomprimidos en MiB (2²⁰ bytes), sumados a partir de las entradas ZIP.

A fecha de 2026-07-29. Las extensiones se actualizan; vuelve a comprobarlo antes de citar.

Qué declaran diez manifiestos

Measured results chart: Declared permission strings

Referencia oficial: Chrome's permission declaration guide.

ExtensionVersionUnpackedFilesPermissionsSite accessReaches file://
Axiom.ai5.1.037.1 MiB2328http://*/* + https://*/*
Table Capture11.0.4121.1 MiB1154 (+3 optional)<all_urls>
Magical3.119.116.8 MiB39513 (+2 optional)<all_urls>
Thunderbit (ours)4.6.415.9 MiB788 recognized (+1 unrecognized array string: commands)<all_urls>
Clay for Chrome1.0.06.3 MiB516*://*/* (injects only on own domain)
Listly0.9.63.5 MiB847http://*/*, https://*/*, file:///*.html
Hexomatic1.8.42.7 MiB372own domains only
Agenty2.9.72.2 MiB494none declared
Clip to Clay1.8.00.7 MiB1642 named domains
TexAu v21.6.60.3 MiB12614 named domains

Dos más estaban en la lista candidata y no aparecen en la tabla, por motivos que vale la pena explicar por separado.

La diferencia es una decisión de diseño, no un efecto del tamaño

Agenty no declara permisos de host y no incluye scripts de contenido. Sus cuatro permisos son activeTab, scripting, identity y identity.email. activeTab es el más restrictivo: concede acceso a la pestaña actual solo después de hacer clic en la extensión, y solo hasta que cambies de página. No se ejecuta nada en tus páginas a menos que tú lo invoques. Y aun así ocupa 2.2 MiB.

Axiom.ai declara http://*/* y https://*/*, inyecta scripts de contenido que coinciden con <all_urls> y descomprime 37.1 MiB en 232 archivos: diecisiete veces el tamaño de Agenty, con acceso permanente a cada página que visitas.

Hexomatic se parece más a Agenty: dos permisos (storage, tabs), sin permisos de host y con scripts de contenido restringidos a sus dos propios dominios.

Clay for Chrome representa un tercer patrón que conviene separar: declara *://*/* como permiso de host, pero solo inyecta scripts de contenido en su propio dominio. La capacidad permanente es amplia; el comportamiento automático es estrecho. Una tabla de permisos sola mezcla ambas cosas.

Cinco de las diez pueden llegar a archivos de tu disco

file:/// no es una web. Es tu sistema de archivos local renderizado en una pestaña del navegador: un PDF que abriste, un HTML exportado, una factura descargada.

Referencia oficial: Chrome match-pattern documentation.

Tres extensiones lo dicen explícitamente. Dos llegan sin nombrarlo: <all_urls> incluye el esquema file:.

ExtensionHow it reaches file://Names file:// in its manifest?Where
Magicalmatches file:///* — every local file Chrome will render, not just HTML — in four of its six content-script entriescontent scripts, and web_accessible_resources
Listlymatches file:///*.htmlcontent scripts
Table Capture<all_urls> content scripts, and it also names the schemeweb_accessible_resources
Axiom.aipurely by virtue of the <all_urls> wildcardnowhere
Thunderbit (ours)purely by virtue of the <all_urls> wildcardnowhere

http://*/* y https://*/* no cubren file://; <all_urls> y *://*/* también difieren en esto. Las cinco aquí son las que alcanzan el esquema por una vía u otra, no por la forma de comodín que eligieron.

Chrome bloquea todo esto tras un interruptor por extensión de “Allow access to file URLs” que está desactivado por defecto, así que la declaración es una solicitud, no una concesión. Cinco de diez es el conteo honesto, y dos de esas cinco nunca escriben file:// en su manifiesto: Axiom.ai y la nuestra.

Este conteo incluye web_accessible_resources, no solo scripts de contenido y permisos de host. Table Capture nombra ahí file://*/*; omitir ese bloque colocaría erróneamente a esa extensión junto a otras cuyos manifiestos alcanzan archivos sin nombrar el esquema.

Permisos que no ves hasta que se solicitan

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

optional_permissions se declaran por adelantado, pero se piden en tiempo de ejecución, así que no aparecen en el aviso de instalación. Dos extensiones los usan, y uno es especialmente relevante.

Extensionoptional_permissionsThe one that matters
Table CaptureuserScripts, downloads, identityuserScripts can run user-supplied scripts in page contexts after Chrome's user gate is enabled
Magicaldownloads, webRequestwebRequest observes network traffic

userScripts no aparece hasta que se solicita, y es invisible para cualquiera que solo cuente permisos.

Además tiene un control que el resto de los permisos de esta auditoría no tienen, y dejarlo fuera lo habría sobrestimado. Declarar userScripts no basta para usarlo: Chrome exige primero una acción explícita del usuario. Antes de Chrome 138 eso era Developer Mode, activado globalmente en chrome://extensions. Desde Chrome 138, es un interruptor Allow User Scripts por extensión en la página de detalles de esa extensión, desactivado por defecto. Así que, en una instalación normal, la capacidad está declarada pero inerte. La afirmación precisa es condicional: Table Capture puede hacer disponible la API userScripts después de que el usuario active el control de Chrome. Esta auditoría no midió cuántos usuarios visitan esa página de ajustes o activan el interruptor.

Ninguno está oculto; ambos están en el manifiesto. Una tabla que ignore el bloque opcional infravalora dos productos.

Momento de inyección, no solo alcance

No se suele prestar atención a cómo se inyecta un script de contenido, y eso cambia bastante la lectura. document_start es el primer punto de enganche que ofrece Chrome; all_frames alcanza los embebidos de terceros.

Todo lo del grupo que se inyecta estáticamente en todos los marcos, ordenado por el momento declarado:

Extensionrun_atall_framesContent-script match pattern
Table Capturedocument_start<all_urls>
Listlydocument_startfile:///*.html plus all of http and https
Axiom.aidocument_startown domains only
Clay for Chromedocument_startown domains only
Thunderbit (ours)document_end<all_urls>
Magicaldocument_idlefile:///* plus broad http and https
TexAudocument_idle (unset)fourteen named patterns

Table Capture y Listly usan el primer hook posible con patrones de coincidencia amplios. Axiom.ai y Clay for Chrome usan el mismo momento, pero solo en sus propios dominios: misma agresividad, objetivo estrecho.

En las declaraciones estáticas, <all_urls> más all_frames es el techo de amplitud de coincidencia, y tanto Table Capture como Thunderbit están ahí. Su timing declarado difiere: Table Capture usa document_start; el script estático de Thunderbit usa document_end. Las APIs de ejecución son una clase de capacidad aparte y no pueden inferirse de esta tabla.

Un conteo de permisos es una mala estadística resumida. Table Capture declara cuatro permisos —menos que la mayoría aquí— e inyecta en document_start en todos los marcos sobre <all_urls>, además de userScripts bajo solicitud.

Quién puede enviar mensajes a la extensión

externally_connectable controla qué páginas web u otras extensiones pueden enviar mensajes directamente al script de fondo de una extensión. Su valor por defecto es contraintuitivo.

Omitir la clave es la opción permisiva. El valor predeterminado de Chrome cuando externally_connectable no está presente es que cualquier extensión puede conectarse, mientras que ninguna página web puede hacerlo. Declararlo es la forma de restringir.

Leído así, la tabla se invierte:

Extensionexternally_connectable declarationWho can message it
AgentyomittedPermissive default — any extension may connect, no web page may
Clay for ChromeomittedPermissive default — any extension may connect, no web page may
Clip to ClayomittedPermissive default — any extension may connect, no web page may
ListlyomittedPermissive default — any extension may connect, no web page may
Table CaptureomittedPermissive default — any extension may connect, no web page may
TexAuomittedPermissive default — any extension may connect, no web page may
Thunderbit (ours)omittedPermissive default — any extension may connect, no web page may
Hexomaticeight extension IDs and six web originsOpens both channels from a closed baseline
Axiom.aiseven web origins, no idsExtension channel closed, seven web pages opened
Magical{"ids": [], "matches": []}The only extension here that closes both channels explicitly

La regla de Chrome tiene dos niveles. Según la referencia del manifiesto:

SituationWho may connect
the whole key is absent"all extensions can connect, but no web pages can connect"
key present, ids unset or []"no extensions or apps can connect"
key present, matches unset or []"no web pages can connect"

El valor permisivo se activa por la ausencia de la clave completa. Una vez presente la clave, ambos subcampos empiezan cerrados y nombrar valores ensancha cada canal.

Axiom.ai declara la clave solo con matches. Por tanto, ids no está definido, lo que significa que ninguna extensión puede enviarle mensajes: el canal entre extensiones está cerrado, no abierto. Lo que sí abrió fueron siete orígenes web, solo uno de los cuales es de Axiom: dos son terceros no atribuibles (*://*.tgwc.space/*, *://*.bitmachine.co.uk/*) y el resto son localhost, 0.0.0.0, un host de Google APIs y una gran plataforma social que no opera.

Hexomatic abre su canal de extensiones a ocho IDs nombrados. Con la clave presente, la base es cero extensiones; nombrar ocho la amplía a ocho. Sus seis matches amplían el otro canal desde ninguno, y dos de ellos son http://localhost:8000/* y http://localhost:3000/* sobre HTTP simple: cualquier cosa que responda en esos puertos en la máquina del usuario entra en la lista permitida.

Siete de las diez omiten la clave por completo, incluida la nuestra, y esas siete son las que se encuentran en el valor permisivo predeterminado para la mensajería entre extensiones. Dos extensiones cierran ese canal: Magical explícitamente con ids: [], y Axiom.ai al declarar la clave y no mencionar nunca ids. Magical es la única que cierra ambos.

Esa última línea es precisamente por qué hay que leer los manifiestos y no solo contar permisos. La misma extensión puede ser amplia en un eje y la más estricta del grupo en otro.

El eje que nadie cuenta: alcances OAuth

Un manifiesto puede incluir un bloque oauth2, y los scopes dentro son acceso a tus cuentas en otras empresas —un tipo de alcance distinto a cualquiera de los anteriores, y que ningún conteo de permisos refleja.

Referencia oficial: Google OAuth 2.0 scope list.

Extensionoauth2 scopes requested
Axiom.aiopenid, email, profile, auth/drive, auth/spreadsheets
Table Captureauth/spreadsheets, auth/userinfo.email
Agentyopenid, email, profile
The other seven, including oursnone declared

https://www.googleapis.com/auth/drive es el más amplio. Google ofrece un scope más estrecho, drive.file, que da acceso solo a los archivos que la app crea ella misma o que el usuario selecciona explícitamente; auth/drive permite ver, editar, crear y borrar en todo el Drive del usuario. auth/spreadsheets tiene la misma forma para cualquier hoja de cálculo que la cuenta pueda alcanzar. Tanto Axiom.ai como Table Capture combinan un scope de cuenta de Google con acceso a páginas <all_urls>.

Dos límites sobre lo que esta tabla prueba. Un scope se solicita, no se concede: Google muestra una pantalla de consentimiento y el usuario puede rechazarla, y quizá la extensión nunca llame a la API. Y el manifiesto solo ve OAuth hecho a través del flujo identity de Chrome; una extensión que en su lugar te lleve a una página web de inicio de sesión no declararía nada aquí. Los siete ceros significan “no solicitado en este archivo”, no “sin acceso a tu cuenta de Google” —incluida la nuestra, que es precisamente por lo que este eje se reporta y no se reclama como señal de estrechez.

Nuestra propia extensión, en la misma escala

Thunderbit 4.6.4 pasó por el mismo analizador de manifiestos que las otras nueve. El paquete ocupa 15.9 MiB descomprimidos en 78 archivos.

Comportamiento estático declarado: <all_urls> aparece en los permisos de host y en los matches de scripts de contenido. El script estático corre en all_frames en document_end. Como <all_urls> incluye file:, el manifiesto puede alcanzar archivos locales después de que el usuario active el control de acceso a archivos de Chrome. Thunderbit también omite externally_connectable, así que Chrome aplica el valor predeterminado que permite mensajes de cualquier extensión, pero no de páginas web.

Techo de capacidad en tiempo de ejecución: el arreglo permissions contiene nueve cadenas: activeTab, commands, debugger, offscreen, scripting, sidePanel, storage, tabGroups y tabs. Chrome reconoce ocho de ellas como permisos; commands es una clave de manifiesto de nivel superior y no tiene efecto como entrada en este arreglo. Thunderbit es la única extensión del grupo que declara debugger, capaz de adjuntar CDP a una pestaña. El manifiesto también deja scripting disponible para registro en tiempo de ejecución. Esas APIs crean capacidades más allá de la fila estática de document_end, pero una lectura del manifiesto no puede establecer que Thunderbit invoque un método concreto de CDP o que registre un script en un momento anterior determinado.

Esa distinción bloquea varias comparaciones tentadoras pero inválidas. La ausencia de un permiso más estrecho como cookies no limita lo que podría acceder un código con debugger. La ausencia de clipboardRead no demuestra que el acceso al portapapeles sea imposible. A la inversa, la presencia de debugger no prueba que esas vías se usen. Responder cualquiera de esas preguntas requiere inspección del código fuente o trazado en tiempo de ejecución, y no se hizo ninguna de las dos.

En este instrumento, Thunderbit es amplio en acceso estático a sitios, único en este conjunto por declarar debugger, y está en el valor predeterminado de Chrome para la mensajería entre extensiones. No existe un único ranking de “más fuerte” porque la auditoría no ofrece un modelo de amenaza común para CDP, OAuth, userScripts, portapapeles y acceso a hosts.

El diseño contenido que nadie vende

TexAu ocupa 0.3 MiB —el más pequeño aquí por un factor de dos— y nombra catorce sitios concretos en lugar de usar un comodín: redes sociales, una plataforma para desarrolladores, plataformas de publicación, un producto de chat, un proveedor de datos de negocio y su propio dominio. Sus scripts de contenido coinciden exactamente con esos mismos catorce.

Puedes leer este manifiesto y saber con precisión dónde está activa la extensión. También es una declaración del producto: la lista de destinos dice para qué sirve la herramienta con más claridad que el marketing.

El intercambio es real: una lista con nombres no puede extraer un sitio que no está ahí, y cada nuevo destino exige una nueva versión. Pero “catorce dominios nombrados” y “cualquier URL que exista” son propuestas muy distintas, y solo una de ellas se puede leer fácilmente.

Dos productos que no eran lo que decía la lista

La extensión de Captain Data no se distribuye públicamente. El endpoint de actualización de Google devuelve HTTP 204 con un cuerpo vacío para su ID de extensión: la respuesta de algo que la tienda no sirve de forma anónima. Su página de listado, en cambio, sí se sirvió de forma anónima —HTTP 200, 509,829 bytes. Lo que la captura no pudo encontrar allí fue una cadena de versión, una fecha de última actualización o un conteo de instalaciones; las notas del propio script dicen que un null ahí es una evidencia débil, y no se observó ninguna barrera de inicio de sesión. El ID es real y de primera parte, así que la lectura más probable es distribución solo por enlace o no listada, pero no pude distinguir eso de una retirada del catálogo y no voy a adivinar.

Dataflow Kit no tiene ninguna extensión de Chrome. Su sitio describe una app web alojada con selección punto y clic y una API REST. Aun así había acabado en una lista corta de extensiones de Chrome, que es como suelen construirse estas listas.

Antigüedad y alcance, ya que ambos se pueden comprobar gratis

Los metadatos de la tienda añaden contexto de selección de producto más allá de los permisos. Los mismos campos se capturaron para cada extensión el 2026-07-30.

ExtensionStore versionLast updatedInstall bucket
Thunderbit (ours)4.6.4July 28, 2026200,000
Listly0.9.6July 25, 2026100,000
Axiom.ai5.1.0July 20, 2026100,000
Table Capture11.0.41June 26, 2026200,000
Magical3.119.1April 4, 2026200,000
Agenty2.9.7February 8, 202610,000
TexAu1.6.6August 20, 20257,000
Clay for Chrome1.0.0April 9, 202510,000
Clip to Clay1.8.0April 8, 20251,000
Hexomatic1.8.4September 6, 20243,000
Captain Datanot publicly served

Tres productos no se han lanzado en más de un año, y Hexomatic en casi dos. Para extensiones eso importa más que para bibliotecas: Chrome publica una versión estable aproximadamente cada cuatro semanas y la propia plataforma de extensiones sigue cambiando debajo. userScripts movió su control de usuario en Chrome 138; una extensión que se lanzó por última vez en 2024 se construyó con un conjunto de reglas distinto al del navegador que ahora las aplica.

Dos cosas que esta tabla no es. Los conteos de instalación están agrupados por Google —1,000 / 3,000 / 7,000 / 10,000 / 100,000 / 200,000—, así que solo comparan órdenes de magnitud, nada más fino, y varios productos publicitan cifras mayores en su propio marketing. Una fecha reciente es un hecho sobre publicación, no un veredicto sobre calidad de mantenimiento o riesgo de permisos.

Un subproducto útil: la versión de la tienda coincide con la versión del manifiesto en los diez paquetes analizados. Los archivos CRX que esta auditoría parseó son los que la tienda está sirviendo hoy, no copias desactualizadas.

La frescura cambia cuánta revisión posterior merece una selección; no cambia la semántica del manifiesto. Una extensión con dominios nombrados y actualizada hace un año puede exponer menos superficie de página que una extensión comodín publicada ayer. El paquete más nuevo puede seguir siendo la mejor opción operativa si sigue a tiempo los cambios de Chrome. Para una lista corta, usa la fecha de la tienda para decidir qué volver a probar, y luego usa el manifiesto para decidir qué requiere una revisión de capacidades más profunda. No conviertas las dos columnas en una sola puntuación.

Lo que un manifiesto no te dice

Un permiso declarado es un techo, no un comportamiento. <all_urls> significa que una extensión puede leer cualquier página. No significa que lo haga, ni que salga nada de tu equipo. Determinar qué ocurre de verdad exige observar el tráfico de red en tiempo de ejecución: un trabajo distinto, no realizado aquí, y nada de lo anterior debe leerse como prueba de uso indebido.

Revisión relacionada: Chrome extension testability experiment.

Tres límites más:

  • Chrome pone barreras a gran parte de esto. El acceso a archivos está desactivado por defecto; activeTab es deliberadamente limitado; los permisos opcionales requieren un aviso en tiempo de ejecución; el usuario ve una lista de permisos al instalar.
  • Los permisos amplios suelen ser necesarios. Una herramienta cuyo trabajo es “extraer una tabla de cualquier página que estés viendo” no puede funcionar desde una lista de dominios concretos. Un alcance estrecho a veces es disciplina y a veces es un producto más pequeño.
  • Una versión, un día. Todas las cifras provienen del paquete servido el 2026-07-29.

Correcciones materiales del análisis

Los conteos publicados usan tres reglas que es fácil aplicar mal al escribir un analizador rápido de manifiestos. Primero, <all_urls> incluye el esquema file:, pero Chrome mantiene el acceso real a archivos detrás de un interruptor controlado por el usuario. Segundo, web_accessible_resources.matches debe revisarse junto con los scripts de contenido y los permisos de host; ahí es donde Table Capture nombra explícitamente file://*/*. Tercero, externally_connectable tiene valores por defecto distintos según si toda la clave está ausente o si la clave existe con un subcampo vacío. Las tablas de arriba aplican esas reglas de forma coherente.

El total de permisos de Thunderbit también distingue entre cadenas crudas y permisos reconocidos por Chrome. Su arreglo tiene nueve entradas, pero commands pertenece al nivel superior, así que el conteo efectivo usado aquí es de ocho permisos reconocidos más una cadena no reconocida. Por último, las declaraciones estáticas de content_scripts no prueban que el código invoque scripting.registerContentScripts o un método CDP. Esas posibilidades solo aparecen bajo la capacidad de tiempo de ejecución, nunca como comportamiento observado. Los manifiestos crudos, los hashes CRX y la salida del analizador deberían enlazarse en un apéndice de publicación para que los lectores puedan auditar estas normalizaciones sin confiar solo en la redacción.

Para una decisión real de instalación, compara al menos cuatro dimensiones por separado: qué páginas están en alcance por defecto, qué acción explícita del usuario desbloquea más alcance, qué APIs del navegador o de cuentas quedan disponibles y qué llamadores externos pueden enviar mensajes a la extensión. El modelo activeTab de Agenty, el userScripts restringido de Table Capture, el scope de Drive de Axiom.ai y la declaración debugger de Thunderbit no son puntos en una escala lineal. Son respuestas distintas a preguntas de amenaza distintas.

Aquí está esa comparación aplicada a cuatro diseños deliberadamente diferentes:

ExtensionPage scope visible in the manifestAdditional gateNon-page capability in this auditExternal caller posture
Agentyno host permission or static content scriptuser invokes activeTab on the current tabChrome identity permissionskey omitted: any extension may connect, no web page may
Table Capturestatic scripts on <all_urls> in all frames at document_startfile access is off by default; userScripts needs Chrome's separate user gateoptional userScripts, downloads, and identitykey omitted: any extension may connect, no web page may
Axiom.aiHTTP and HTTPS wildcard access; static scripts at document_start on its own domainsOAuth consent for requested Google scopesDrive and Sheets OAuth scopes declaredextension callers closed; seven web origins opened
Thunderbit<all_urls> host access and static scripts in all frames at document_endfile access is off by default; attaching debugger has Chrome-controlled user-visible behaviordebugger, scripting, tabs, and related browser APIs declaredkey omitted: any extension may connect, no web page may

Esta tabla sigue sin producir un ganador. El acceso permanente y estrecho de Agenty a páginas no dice nada sobre lo que hace su backend con los datos enviados. Los scopes de cuenta de Axiom.ai no son comparables a una extensión leyendo la página actual. La declaración userScripts de Table Capture permanece inerte hasta que el usuario activa su control separado. El permiso debugger de Thunderbit expone una superficie amplia de control del navegador, pero el manifiesto no revela qué dominios o métodos CDP llama su código. Cada fila te dice qué inspeccionar después: tráfico de red en tiempo de ejecución, código fuente, flujo de consentimiento o trazas de la API del navegador.

System diagram: How to read your own

La misma separación importa al leer el aviso de instalación de Chrome. Un conteo bruto de permisos no puede mostrar timing, alcance por marcos, scope OAuth, web_accessible_resources o una clave externally_connectable omitida. A la inversa, una declaración amplia no prueba recolección ni exfiltración. El resultado útil de una auditoría de manifiesto es un plan de pruebas en tiempo de ejecución priorizado: identificar la superficie de datos, anotar el control del usuario y luego observar si la vía declarada se usa.

Cómo leer el tuyo

Revisión relacionada: browser automation guide.

  1. chrome://extensionsDetails muestra el acceso a sitios concedido y permite cambiarlo a on click para todo lo que no necesite acceso permanente. Eso reduce la mitad de acceso a sitios de lo anterior. No afecta la mensajería entrante (externally_connectable llega al service worker igualmente) ni los permisos a nivel navegador. Thunderbit's debugger declaration matters here. Chromium's own extensions security documentation says the debugger API "may in some cases also sidestep other typical restrictions, such as host permissions or file access", so setting site access to "on click" does not bound what it can reach. Nor does the control touch tabs, webNavigation, clipboardRead, downloads, or anything in optional_permissions.
  2. For the raw file, the package sits under Chrome's Extensions/<id>/<version>/ directory. Read six fields: permissions, optional_permissions, host_permissions, content_scripts (the matches, run_at and all_frames inside), externally_connectable — remembering that an absent key is permissive for extension callers — and web_accessible_resources, whose matches can name schemes the content scripts never do. Thunderbit's last field has two <all_urls> entries exposing index.html and two bundled scripts to every origin, with use_dynamic_url: false, which allows a page to test whether those stable extension URLs resolve.
  3. Check the listing's last-updated date against the current Chrome version.

Disclosure and resources: this article is published by Thunderbit, whose extension is included in the same table and parser. Our open-source scraper pillar covers non-extension tools.

Try Thunderbit for Web Data Extraction

La versión corta

Diez extensiones de scraping y automatización, incluida la nuestra, se analizaron a partir de sus propios manifiestos.

Agenty no declara acceso a sitios ni scripts de contenido, y solo funciona en la pestaña que estás viendo cuando haces clic en ella, en 2.2 MiB. Axiom.ai declara todas las URLs HTTP y HTTPS en 37.1 MiB. Magical declara trece permisos, incluido clipboardRead —y además es la única extensión aquí que cierra por completo la mensajería entrante. Table Capture declara solo cuatro permisos, e inyecta en document_start en todos los marcos sobre <all_urls> —el mismo techo de coincidencia que alcanza la nuestra, pero antes—, además de userScripts bajo solicitud. TexAu es la más pequeña, y nombra más destinos —catorce patrones en trece propiedades distintas. No es la única que los nombra: Clip to Clay declara dos (clay.com y un sitio de terceros), y Hexomatic y Clay for Chrome nombran sus propios dominios. TexAu es la única cuyo listado nombrado es, en su mayoría, de sitios ajenos. Cinco de las diez pueden llegar a archivos en tu disco, y dos de ellas —Axiom.ai y la nuestra— sin escribir nunca file://.

Thunderbit, la nuestra, está en el extremo amplio: <all_urls> tanto para acceso a hosts como para inyección estática, más debugger, que ninguna otra extensión de este grupo declara. Está en el valor predeterminado de Chrome que permite mensajes de cualquier extensión y alcanza file:// una vez que se activa el control de acceso a archivos de Chrome.

Una declaración es un techo, no un comportamiento, y nada de esto demuestra uso indebido. Pero está publicado, es gratis de comprobar, y la distancia entre ambos extremos es mayor que cualquier cosa en las páginas de producto.

Prueba Thunderbit para extracción de datos web Get Started Free

Preguntas frecuentes

¿Un permiso amplio significa que la extensión está haciendo algo mal? ¿Y por qué no basta con contar permisos? No, y contar no basta porque deja fuera dos cosas. <all_urls> significa que una extensión puede leer todas las páginas que visitas; no dice qué hace ni si algo sale de tu máquina, y una herramienta construida para extraer datos de cualquier página de verdad no puede funcionar desde una lista de dominios concretos. El hallazgo es la amplitud, no una mala conducta; demostrar el comportamiento real requiere análisis de tráfico en tiempo de ejecución, que esta auditoría no hizo. En cuanto al conteo: los ajustes de inyección no son permisos, así que Table Capture declara cuatro mientras inyecta en document_start, en all_frames, coincidiendo con <all_urls>. Y optional_permissions ni siquiera aparece en el aviso de instalación: Table Capture puede solicitar userScripts en tiempo de ejecución, lo que permite ejecutar scripts arbitrarios del usuario en contextos de página, y Magical puede solicitar webRequest.

¿Cuál pide menos? Agenty: cuatro permisos, sin permisos de host y sin scripts de contenido. Se apoya en activeTab, que concede acceso a la pestaña actual solo después de hacer clic en la extensión y solo hasta que navegas a otra página. Hexomatic viene después, con dos permisos y scripts de contenido limitados a sus propios dominios.

¿Cómo puede una extensión llegar a mis archivos locales sin declarar file://? Porque <all_urls> incluye el esquema file:. Listly, Magical y Table Capture nombran patrones file:// de forma explícita —Magical en sus scripts de contenido y Table Capture en web_accessible_resources. Axiom.ai y Thunderbit llegan a él mediante el comodín sin mencionarlo en ningún sitio. http://*/* y https://*/* no cubren file://. Chrome mantiene el acceso a archivos apagado por defecto tras un interruptor por extensión, así que la declaración es una solicitud, no una concesión.

¿Qué es externally_connectable y por qué omitirlo es la opción permisiva? Enumera los orígenes web o IDs de extensiones autorizados para enviar mensajes al script de fondo de una extensión. El valor predeterminado de Chrome cuando la clave está ausente es que cualquier extensión puede conectarse y ninguna página web puede hacerlo. Siete de estas diez la omiten, incluida Thunderbit. Con la clave presente, Hexomatic abre el canal de extensiones a ocho IDs nombrados; Axiom.ai abre siete orígenes web dejando cerrado el canal de extensiones; Magical declara listas vacías para ambos, cerrando ambos canales.

¿Qué declara el propio manifiesto de Thunderbit? <all_urls> para acceso a hosts e inyección estática de scripts de contenido, en all_frames en document_end; 15.9 MiB en 78 archivos; y nueve cadenas en el arreglo de permisos. Ocho son permisos reconocidos: activeTab, debugger, offscreen, scripting, sidePanel, storage, tabGroups y tabs. commands es una clave de manifiesto de nivel superior y no tiene efecto en ese arreglo. Ninguna otra extensión de este grupo declara debugger. Thunderbit también alcanza file:// mediante <all_urls> una vez que se activa la barrera de acceso a archivos de Chrome, y omite externally_connectable. No se ejecutó comportamiento en tiempo de ejecución, así que la auditoría no afirma qué métodos CDP o de scripting llama realmente la extensión.

Ke
Ke
CTO en Thunderbit | Científico de datos sénior y experto en ML Con casi una década de experiencia en aprendizaje automático y ciencia de datos, Ke Shen es exalumno de la Universidad de Columbia y antiguo científico de datos sénior en Walmart Labs. Con una sólida experiencia, reconocida por sus pares, en Python, R, Java y estadística, comparte conocimientos probados en el campo sobre cómo llevar algoritmos complejos de IA desde la teoría hasta una arquitectura lista para producción.
Topics
Web Scraping ToolsAI Web Scraper
Tabla de contenidos
Thunderbit · Agente de datos web con IA

Extrae datos de cualquier página en 1 clic

Con la confianza de más de 250,000 usuarios
plan gratuito disponible
De la página web a la hoja de cálculo
Describe lo que necesitas: el agente de IA de Thunderbit lo extrae y lo exporta a Excel, Google Sheets, Airtable o Notion. Empieza gratis.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week