Každé rozšíření pro Chrome obsahuje soubor manifest.json, který z velké části určuje jeho schopnosti na úrovni prohlížeče: vyžádaná API, vzory hostitelů, statické content scripts, volitelná oprávnění a povolená externí připojení. Je to veřejný soubor v balíčku, který instalujete. Neprokazuje však, které deklarované schopnosti runtime kód skutečně používá, co opouští váš počítač ani ke kterému účtu se přistupuje přes samostatné webové přihlášení.
Pro tuto analýzu jsem prošel deset rozšíření pro scraping a automatizaci v prohlížeči, včetně Thunderbit, které je naše. Rozptyl je velký. Jedno neuvádí žádný trvalý přístup ke stránkám. Jiné deklaruje třináct oprávnění včetně clipboardRead. Thunderbit je v této sadě jediné rozšíření, které deklaruje debugger — tedy širokou schopnost připojení přes CDP s odlišným rizikovým profilem než přístup na stránky, OAuth nebo uživatelem dodané skripty.
To není obvinění. Široké oprávnění je často jediný poctivý způsob, jak danou funkci vůbec postavit, a úzké oprávnění může jednoduše znamenat, že produkt dělá méně. Pointa je, že ten rozdíl je obrovský, je veřejně vidět a v porovnávacích tabulkách se obvykle vůbec neukáže.
Jak jsem postupoval
Každé rozšíření bylo staženo jako .crx z oficiálního aktualizačního endpointu Googlu — stejné URL, které používá i samotný Chrome — a poté rozbaleno a zparsováno. Žádné rozšíření nebylo instalováno a žádný kód rozšíření nebyl spuštěn. Jde o čtení JSON souboru.
Stahování probíhalo tempem zhruba jeden požadavek každé dvě sekundy. Každý .crx, jeho SHA-256 a extrahovaný manifest.json jsou uložené jako artefakty. Thunderbit prošel stejným skriptem jako ostatních devět, ne žádným bokem, takže jeho řádek je odvozen přesně stejně jako ostatní.
Analýza používá dva typy důkazů a drží je odděleně:
- Deklarované statické chování: vzory hostitelů a položky
content_scripts, včetněmatches,run_ataall_frames. - Schopnosti dostupné runtime kódu: API uvedená v
permissionsnebooptional_permissions. Tyto deklarace ukazují, co si kód může vyžádat nebo zavolat, ne to, že to skutečně dělá.
Nedávám žádné pořadí typu „nejmocnější“. debugger, userScripts, široký přístup k hostitelům, OAuth scope, přístup ke schránce i externí messaging představují různé typy dat a vyžadují různé podmínky. Porovnat je lze jen s konkrétním threat modelem, který tento audit založený jen na manifestu neposkytuje.
Velikosti níže jsou rozbalené součty v MiB (2²⁰ bajtů), sečtené z položek ZIPu.
Platí k 2026-07-29. Rozšíření se aktualizují; před citací ověřte znovu.
Co deklaruje deset manifestů

Oficiální reference: Chrome's permission declaration guide.
| Extension | Version | Unpacked | Files | Permissions | Site access | Reaches file:// |
|---|---|---|---|---|---|---|
| Axiom.ai | 5.1.0 | 37.1 MiB | 232 | 8 | http://*/* + https://*/* | ✅ |
| Table Capture | 11.0.41 | 21.1 MiB | 115 | 4 (+3 optional) | <all_urls> | ✅ |
| Magical | 3.119.1 | 16.8 MiB | 395 | 13 (+2 optional) | <all_urls> | ✅ |
| Thunderbit (ours) | 4.6.4 | 15.9 MiB | 78 | 8 recognized (+1 unrecognized array string: commands) | <all_urls> | ✅ |
| Clay for Chrome | 1.0.0 | 6.3 MiB | 51 | 6 | *://*/* (injects only on own domain) | — |
| Listly | 0.9.6 | 3.5 MiB | 84 | 7 | http://*/*, https://*/*, file:///*.html | ✅ |
| Hexomatic | 1.8.4 | 2.7 MiB | 37 | 2 | own domains only | — |
| Agenty | 2.9.7 | 2.2 MiB | 49 | 4 | none declared | — |
| Clip to Clay | 1.8.0 | 0.7 MiB | 16 | 4 | 2 named domains | — |
| TexAu v2 | 1.6.6 | 0.3 MiB | 12 | 6 | 14 named domains | — |
Ještě dvě položky byly na kandidátním seznamu a v tabulce nejsou, a to z důvodů, které stojí za samostatné zmínění.
Rozptyl je designové rozhodnutí, ne důsledek velikosti
Agenty nedeklaruje žádná host permissions a nenasazuje žádné content scripts. Jeho čtyři oprávnění jsou activeTab, scripting, identity a identity.email. activeTab je to úzké: dává přístup k aktuální kartě až po kliknutí na rozšíření, a to jen do chvíle, než odejdete jinam. Na vašich stránkách se nic nespouští, dokud to sami nevyvoláte. A to vše v 2,2 MiB.
Axiom.ai deklaruje http://*/* a https://*/*, vkládá content scripts odpovídající <all_urls> a rozbalí se na 37,1 MiB ve 232 souborech — sedmnáctkrát víc než Agenty, se stálým přístupem ke každé stránce, kterou navštívíte.
Hexomatic je podobný Agenty: dvě oprávnění (storage, tabs), žádné host permissions, content scripts omezené na jeho vlastní dvě domény.
Clay for Chrome má třetí podobu, kterou je dobré oddělit: jako host permission deklaruje *://*/*, ale content scripts vkládá jen na své vlastní doméně. Trvalá schopnost je široká; automatické chování je úzké. Samotná tabulka oprávnění tyto rozdíly splývá.
Pět z deseti se může dostat k souborům na disku
file:/// není web. Je to váš lokální souborový systém zobrazený v panelu prohlížeče — PDF, které jste otevřeli, HTML export, stažená faktura.
Oficiální reference: Chrome match-pattern documentation.
Tři rozšíření to říkají výslovně. Dvě se k tomu dostanou bez přímého pojmenování: <all_urls> zahrnuje i schéma file:.
| Extension | How it reaches file:// | Names file:// in its manifest? | Where |
|---|---|---|---|
| Magical | matches file:///* — every local file Chrome will render, not just HTML — in four of its six content-script entries | ✅ | content scripts, and web_accessible_resources |
| Listly | matches file:///*.html | ✅ | content scripts |
| Table Capture | <all_urls> content scripts, and it also names the scheme | ✅ | web_accessible_resources |
| Axiom.ai | purely by virtue of the <all_urls> wildcard | — | nowhere |
| Thunderbit (ours) | purely by virtue of the <all_urls> wildcard | — | nowhere |
http://*/* a https://*/* file:// nepokrývají; <all_urls> a *://*/* se v tomto také liší. Pět zde uvedených rozšíření je těch, jejichž deklarace se ke schématu dostanou jednou nebo druhou cestou — ne podle toho, jaký wildcard zvolily.
Chrome to všechno schovává za přepínač „Allow access to file URLs“ na úrovni každého rozšíření, který je ve výchozím stavu vypnutý, takže deklarace je žádost, ne udělení. Pět z deseti je poctivý počet a dvě z těchto pěti nikdy nikde v manifestu file:// nezapíšou: Axiom.ai a naše rozšíření.
Tento součet zahrnuje i web_accessible_resources, nejen content scripts a host permissions. Table Capture tam uvádí file://*/*; bez této sekce by se chybně zařadilo mezi rozšíření, jejichž manifesty se k souborům dostanou, aniž by schéma pojmenovaly.
Oprávnění, která neuvidíte, dokud si je nerozsvítíte

optional_permissions jsou deklarovaná předem, ale žádají se až za běhu, takže se neobjeví v instalačním promptu. Používají je dvě rozšíření, z nichž jedno je podstatné.
| Extension | optional_permissions | The one that matters |
|---|---|---|
| Table Capture | userScripts, downloads, identity | userScripts can run user-supplied scripts in page contexts after Chrome's user gate is enabled |
| Magical | downloads, webRequest | webRequest observes network traffic |
userScripts je do chvíle, než je vyžádáno, neviditelné a pro kohokoli, kdo počítá jen oprávnění, snadno přehlédnutelné.
Má navíc bránu, kterou ostatní oprávnění v tomto auditu nemají, a bez ní bych ho nadhodnotil. Samotné deklarování userScripts nestačí: Chrome vyžaduje předem explicitní akci uživatele. Před Chromem 138 to byl Developer Mode zapnutý globálně na chrome://extensions. Od Chrome 138 je to přepínač Allow User Scripts na stránce detailu daného rozšíření, ve výchozím stavu vypnutý. U běžné instalace je tedy schopnost deklarovaná, ale neaktivní. Přesné tvrzení je podmíněné: Table Capture může zpřístupnit API userScripts až poté, co uživatel zapne příslušnou bránu v Chromu. Tento audit neměřil, jak často uživatelé do nastavení chodí nebo přepínač zapínají.
Ani jedno není skryté; obojí je v manifestu. Tabulka, která ignoruje sekci optional, oba produkty podhodnocuje.
Načasování injektáže, nejen rozsah
Nejen kam se content script vkládá, ale i kdy, výrazně mění obraz. document_start je nejranější hook, který Chrome nabízí; all_frames zasahuje i třetí strany vložené do stránky.
Všechno v této sadě, co staticky injektuje do všech rámců, seřazené podle deklarovaného načasování:
| Extension | run_at | all_frames | Content-script match pattern |
|---|---|---|---|
| Table Capture | document_start | ✅ | <all_urls> |
| Listly | document_start | ✅ | file:///*.html plus all of http and https |
| Axiom.ai | document_start | ✅ | own domains only |
| Clay for Chrome | document_start | ✅ | own domains only |
| Thunderbit (ours) | document_end | ✅ | <all_urls> |
| Magical | document_idle | ✅ | file:///* plus broad http and https |
| TexAu | document_idle (unset) | ✅ | fourteen named patterns |
Table Capture a Listly používají nejranější hook na široké sady patternů. Axiom.ai a Clay for Chrome používají stejné načasování, ale jen na svých vlastních doménách — stejná agresivita, úzký cíl.
Pro statické deklarace platí, že <all_urls> plus all_frames je strop šířky záběru, a na něm jsou jak Table Capture, tak Thunderbit. Liší se deklarovaným načasováním: Table Capture používá document_start; statický content script Thunderbit používá document_end. Runtime API jsou samostatná kategorie schopností a z této tabulky je nelze odvodit.
Počet oprávnění je špatná souhrnná statistika. Table Capture deklaruje čtyři oprávnění — méně než většina zde — a přitom injektuje do všech rámců na <all_urls> v document_start, plus userScripts na vyžádání.
Kdo smí rozšíření posílat zprávy
externally_connectable určuje, které weby nebo jiná rozšíření mohou posílat zprávy přímo do background scriptu rozšíření. Jeho výchozí nastavení je neintuitivní.
Vynechání klíče je to benevolentní nastavení. Výchozí chování Chromu, když externally_connectable chybí, je, že se může připojit jakékoli rozšíření, ale žádná webová stránka ne. Deklarace klíče je způsob, jak to omezit.
Při tomto čtení se tabulka obrací:
| Extension | externally_connectable declaration | Who can message it |
|---|---|---|
| Agenty | omitted | Permissive default — any extension may connect, no web page may |
| Clay for Chrome | omitted | Permissive default — any extension may connect, no web page may |
| Clip to Clay | omitted | Permissive default — any extension may connect, no web page may |
| Listly | omitted | Permissive default — any extension may connect, no web page may |
| Table Capture | omitted | Permissive default — any extension may connect, no web page may |
| TexAu | omitted | Permissive default — any extension may connect, no web page may |
| Thunderbit (ours) | omitted | Permissive default — any extension may connect, no web page may |
| Hexomatic | eight extension IDs and six web origins | Opens both channels from a closed baseline |
| Axiom.ai | seven web origins, no ids | Extension channel closed, seven web pages opened |
| Magical | {"ids": [], "matches": []} | The only extension here that closes both channels explicitly |
Pravidlo Chromu má dvě úrovně. Z referenční dokumentace manifestu:
| Situation | Who 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" |
Benevolentní výchozí stav je spojený s nepřítomností celého klíče. Jakmile klíč existuje, obě podpole začínají zavřená a jejich hodnoty jednotlivé kanály rozšiřují.
Axiom.ai deklaruje klíč jen s matches. Jeho ids je tedy nevyplněné, což znamená, že se mu nemůže připojit žádné rozšíření — kanál pro rozšíření je uzavřený, ne otevřený. Otevřel ale sedm webových původů, z nichž jen jeden patří Axiomu: dva jsou neidentifikovatelné třetí strany (*://*.tgwc.space/*, *://*.bitmachine.co.uk/*) a zbytek je localhost, 0.0.0.0, host Google APIs a jedna velká sociální platforma, kterou neprovozuje.
Hexomatic otevírá kanál pro rozšíření osmi jmenovaným ID. S klíčem přítomným je výchozí stav nula rozšíření; osm zadaných ID ho rozšíří na osm. Jeho šest matches rozšiřuje druhý kanál z ničeho, přičemž dvě z nich jsou http://localhost:8000/* a http://localhost:3000/* přes obyčejné HTTP — cokoli odpovídá na těchto portech na uživatelově stroji, je v allowlistu.
Sedm z deseti klíč vynechává úplně, včetně našeho, a právě těch sedm je na benevolentním výchozím nastavení pro messaging mezi rozšířeními. Dvě rozšíření tento kanál uzavírají: Magical explicitně pomocí ids: [] a Axiom.ai tím, že klíč deklaruje, ale ids vůbec neuvede. Magical je jediné, které explicitně uzavírá oba kanály.
A právě to je důvod číst manifesty, ne jen sčítat oprávnění. Stejné rozšíření může být na jedné ose široké a na jiné nejpřísnější v celé sadě.
Osa, kterou nikdo nepočítá: OAuth scopes
Manifest může obsahovat blok oauth2 a scope uvnitř jsou přístupem k vašim účtům u jiných firem — jiný typ dosahu než cokoli výše a něco, co žádný součet oprávnění nepostihne.
Oficiální reference: Google OAuth 2.0 scope list.
| Extension | oauth2 scopes requested |
|---|---|
| Axiom.ai | openid, email, profile, auth/drive, auth/spreadsheets |
| Table Capture | auth/spreadsheets, auth/userinfo.email |
| Agenty | openid, email, profile |
| The other seven, including ours | none declared |
https://www.googleapis.com/auth/drive je ten široký scope. Google nabízí užší drive.file, který dává přístup jen k souborům, které aplikace sama vytvořila nebo které si uživatel výslovně vybere; auth/drive znamená čtení, úpravy, vytváření i mazání napříč celým Drive uživatele. auth/spreadsheets má stejný charakter pro všechny tabulky, ke kterým může účet přistupovat. Axiom.ai i Table Capture tedy spojují scope pro Google účet s přístupem na stránky přes <all_urls>.
Dvě omezení toho, co tato tabulka dokazuje. Scope je požadovaný, ne udělený — Google zobrazí consent screen a uživatel může odmítnout, a rozšíření API možná nikdy vůbec nezavolá. A manifest vidí OAuth jen přes Chrome identity flow; rozšíření, které vás místo toho pošle na webovou přihlašovací stránku, zde nemusí deklarovat nic. Sedm nul znamená „v tomto souboru nepožadováno“, ne „žádný přístup k vašemu Google účtu“ — včetně našeho, a právě proto je tato osa uváděna jako samostatná, ne jako tvrzení o úzkosti.
Naše vlastní rozšíření na stejné škále
Thunderbit 4.6.4 prošel stejným parserem manifestu jako ostatních devět. Balíček má po rozbalení 15,9 MiB ve 78 souborech.
Deklarované statické chování: <all_urls> se objevuje v host permissions i v matches content scriptů. Statický skript běží v all_frames na document_end. Protože <all_urls> zahrnuje i file:, může manifest po zapnutí chromího přepínače přístupu k souborům dosáhnout i na lokální soubory. Thunderbit také vynechává externally_connectable, takže Chrome ve výchozím stavu povoluje zprávy od jakéhokoli rozšíření, ale ne od žádné webové stránky.
Runtime capability ceiling: pole permissions obsahuje devět řetězců: activeTab, commands, debugger, offscreen, scripting, sidePanel, storage, tabGroups a tabs. Chrome z nich jako oprávnění rozpoznává osm; commands je klíč na úrovni manifestu a jako položka v tomto poli nemá žádný efekt. Thunderbit je v této sadě jediné rozšíření, které deklaruje debugger, což umožňuje připojení CDP k tabu. Manifest také zpřístupňuje scripting pro runtime registraci. Tato API vytvářejí schopnosti nad rámec statického řádku document_end, ale samotné čtení manifestu nemůže prokázat, že Thunderbit volá konkrétní CDP metodu nebo registruje skript v nějakém dřívějším okamžiku.
Tohle rozlišení blokuje několik lákavých, ale neplatných srovnání. To, že chybí užší oprávnění cookies, nijak neomezuje, co může kód s debugger získat. To, že chybí clipboardRead, není důkazem, že přístup ke schránce není možný. Naopak přítomnost debugger není důkazem, že tyto cesty skutečně používá. Odpověď na kteroukoli z těchto otázek vyžaduje kontrolu zdrojového kódu nebo runtime tracing, a ani jedno zde provedeno nebylo.
V tomto nástroji je Thunderbit široký v přístupu na statické stránky, v této sadě jedinečný tím, že deklaruje debugger, a zároveň je na výchozím chování Chromu pro messaging mezi rozšířeními. Neexistuje jediné „nejsilnější“ pořadí, protože audit nedává společný threat model pro CDP, OAuth, userScripts, schránku a přístup k hostitelům.
Střídmý design, který nikdo neprodává
TexAu má 0,3 MiB — je zde nejmenší zhruba na polovinu — a místo wildcardu jmenuje čtrnáct konkrétních webů: sociální sítě, vývojářskou platformu, publikační platformy, chat produkt, poskytovatele business dat a vlastní doménu. Jeho content scripts odpovídají přesně těm samým čtrnácti.
Z tohoto manifestu lze vyčíst přesně, kde je rozšíření aktivní. Zároveň jde i o produktové sdělení — seznam cílových webů říká, k čemu je nástroj určen, jasněji než marketing.
Kompromis je reálný: seznam domén nemůže pokrýt web, který na něm není, a pro každý nový cíl je potřeba vydat novou verzi. Ale „čtrnáct pojmenovaných domén“ a „každé URL, které existuje“ jsou dvě velmi odlišné věci, a jen jedna z nich je čitelná.
Dva produkty, které nebyly tím, za co se vydávaly v seznamu
Rozšíření Captain Data není veřejně distribuované. Aktualizační endpoint Googlu vrací pro jeho extension ID HTTP 204 s prázdným tělem — odpověď pro něco, co Store anonymně neservíruje. Naopak jeho listing stránka byla dostupná anonymně — HTTP 200, 509 829 bajtů. Co v ní ale zachycení nenašlo, byl číslo verze, datum poslední aktualizace ani počet instalací; vlastní poznámky skriptu uvádějí, že nula zde je slabý důkaz, a nebyla pozorována žádná přihlašovací bariéra. ID je reálné a první strany, takže nejpravděpodobnější je distribuce přes odkaz nebo neveřejný listing, ale nedokázal jsem rozlišit to od delistování a nebudu hádat.
Dataflow Kit nemá vůbec žádné Chrome rozšíření. Jeho web popisuje hostovanou webovou aplikaci s výběrem klikáním a REST API. Přesto byl na seznam Chrome-rozšíření zařazen — což je přesně způsob, jakým tyto seznamy obvykle vznikají.
Zastaralost a dosah, protože obojí jde snadno ověřit
Metadata ze Store přidávají ke konfiguraci produktů kontext nad rámec oprávnění. Stejné údaje byly zachyceny pro každé rozšíření dne 2026-07-30.
| Extension | Store version | Last updated | Install bucket |
|---|---|---|---|
| Thunderbit (ours) | 4.6.4 | July 28, 2026 | 200,000 |
| Listly | 0.9.6 | July 25, 2026 | 100,000 |
| Axiom.ai | 5.1.0 | July 20, 2026 | 100,000 |
| Table Capture | 11.0.41 | June 26, 2026 | 200,000 |
| Magical | 3.119.1 | April 4, 2026 | 200,000 |
| Agenty | 2.9.7 | February 8, 2026 | 10,000 |
| TexAu | 1.6.6 | August 20, 2025 | 7,000 |
| Clay for Chrome | 1.0.0 | April 9, 2025 | 10,000 |
| Clip to Clay | 1.8.0 | April 8, 2025 | 1,000 |
| Hexomatic | 1.8.4 | September 6, 2024 | 3,000 |
| Captain Data | — | — | not publicly served |
Tři produkty nevydaly novou verzi už přes rok a Hexomatic téměř dva roky. U rozšíření je to důležitější než u knihoven: Chrome vydává stabilní verzi zhruba každé čtyři týdny a samotná platforma rozšíření se pod tím mezitím mění. userScripts ve Chromu 138 změnilo svou uživatelskou bránu; rozšíření, které naposledy vyšlo v roce 2024, bylo napsané proti jinému souboru pravidel, než jaký dnes prohlížeč vynucuje.
Dvě věci, které tato tabulka není. Počty instalací jsou Googlem zaokrouhlené do bucketů — 1 000 / 3 000 / 7 000 / 10 000 / 100 000 / 200 000 — takže porovnávají jen řády velikosti, nic jemnějšího, a několik produktů uvádí ve vlastním marketingu vyšší čísla. Nedávné datum je fakt o vydání, ne verdikt o kvalitě údržby nebo riziku oprávnění.
Jeden užitečný vedlejší výsledek: verze v obchodu odpovídá verzi manifestu u všech deseti analyzovaných balíčků. CRX soubory, které tento audit parsoval, jsou ty, které Store dnes skutečně servíruje, nikoli zastaralé kopie.
Čerstvost ovlivňuje, kolik následné práce si výběr zaslouží; nemění sémantiku manifestu. Rozšíření s pojmenovanými doménami, které bylo aktualizováno před rokem, může pořád vystavovat menší plochu než wildcardové rozšíření vydané včera. Novější balíček může být přesto lepší provozní volba, pokud rychle reaguje na změny v Chromu. Pro shortlist použijte datum ve Store k rozhodnutí, co znovu otestovat, a manifest k rozhodnutí, co vyžaduje podrobnější kontrolu schopností. Nedělejte z těch dvou sloupců jedno skóre.
Co vám manifest neřekne
Deklarované oprávnění je strop, ne chování. <all_urls> znamená, že rozšíření může číst každou stránku. Neznamená, že to dělá, ani že cokoli odchází z vašeho počítače. Zjištění toho, co se skutečně děje, vyžaduje sledování síťového provozu za běhu — jinou práci, kterou jsme zde neprováděli, a nic výše by nemělo být čteno jako důkaz zneužití.
Související čtení: Chrome extension testability experiment.
Ještě tři hranice:
- Chrome řadu věcí aktivně omezuje. Přístup k souborům je ve výchozím stavu vypnutý;
activeTabje záměrně úzké; volitelná oprávnění vyžadují runtime prompt; uživatelé vidí při instalaci seznam oprávnění. - Široká oprávnění jsou často nezbytná. Nástroj, jehož úkolem je „vytáhnout tabulku z libovolné stránky, na které právě jste“, nemůže fungovat jen z allowlistu pojmenovaných domén. Úzký rozsah je někdy disciplína a někdy jen menší produkt.
- Jedna verze, jeden den. Každý údaj pochází z balíčku servírovaného 2026-07-29.
Materiální opravy v analýze
Zveřejněné počty používají tři pravidla, která se při rychlém parseru manifestu snadno pletou. Za prvé, <all_urls> zahrnuje schéma file:, ale Chrome skutečný přístup k souborům drží za přepínačem ovládaným uživatelem. Za druhé, web_accessible_resources.matches je třeba číst společně s content scripts a host permissions; právě tam Table Capture výslovně uvádí file://*/*. Za třetí, externally_connectable má různé výchozí hodnoty podle toho, zda celý klíč chybí, nebo zda klíč existuje s prázdným podpoletem. Tabulky výše tato pravidla používají konzistentně.
Součet oprávnění Thunderbitu navíc rozlišuje mezi syrovými řetězci a skutečně rozpoznanými oprávněními Chromu. Jeho pole má devět položek, ale commands patří na nejvyšší úroveň manifestu, takže efektivní součet použitý zde je osm rozpoznaných oprávnění plus jeden nerozpoznaný řetězec. A konečně: statické deklarace content_scripts nejsou důkazem, že kód volá scripting.registerContentScripts nebo nějakou CDP metodu. Tyto možnosti se objevují jen u runtime capability, nikdy jako pozorované chování. Raw manifesty, CRX hash a výstup parseru jsou auditní stopou pro tyto normalizace, takže čtenář nemusí věřit textu jen na slovo.
Pro skutečné rozhodnutí o instalaci porovnávejte alespoň čtyři dimenze odděleně: které stránky jsou ve výchozím stavu v rozsahu, jaká explicitní akce uživatele zpřístupní víc, která browserová nebo účtová API se stanou dostupnými a kteří externí volající mohou rozšíření posílat zprávy. Model activeTab u Agenty, řízený userScripts u Table Capture, Drive scope u Axiom.ai a deklarace debugger u Thunderbit nejsou body na jedné přímce. Jsou to různé odpovědi na různé bezpečnostní otázky.
Tady je toto srovnání aplikované na čtyři záměrně odlišné návrhy:
| Extension | Page scope visible in the manifest | Additional gate | Non-page capability in this audit | External caller posture |
|---|---|---|---|---|
| Agenty | no host permission or static content script | user invokes activeTab on the current tab | Chrome identity permissions | key omitted: any extension may connect, no web page may |
| Table Capture | static scripts on <all_urls> in all frames at document_start | file access is off by default; userScripts needs Chrome's separate user gate | optional userScripts, downloads, and identity | key omitted: any extension may connect, no web page may |
| Axiom.ai | HTTP and HTTPS wildcard access; static scripts at document_start on its own domains | OAuth consent for requested Google scopes | Drive and Sheets OAuth scopes declared | extension callers closed; seven web origins opened |
| Thunderbit | <all_urls> host access and static scripts in all frames at document_end | file access is off by default; attaching debugger has Chrome-controlled user-visible behavior | debugger, scripting, tabs, and related browser APIs declared | key omitted: any extension may connect, no web page may |
Ani tato tabulka nedává vítěze. Úzký trvalý přístup Agenty na stránku nic neříká o tom, co jeho backend dělá s odeslanými daty. Účtové scope Axiom.ai nelze srovnávat s tím, že rozšíření čte právě otevřenou stránku. Deklarace userScripts u Table Capture je inertní, dokud uživatel nezapne samostatnou bránu. debugger u Thunderbitu vystavuje širokou plochu pro řízení prohlížeče, ale manifest neprozrazuje, na které CDP domény nebo metody jeho kód sahá. Každý řádek říká, co si máte ověřit dál: runtime síťový provoz, zdrojový kód, consent flow nebo stopy browser API.

Stejné oddělení je důležité i při čtení instalačního promptu Chromu. Hrubý počet oprávnění neukáže načasování, dosah do rámců, OAuth scope, web_accessible_resources ani vynechaný klíč externally_connectable. Naopak široká deklarace není důkazem sběru nebo exfiltrace. Užitek z auditu manifestu je prioritizovaný plán runtime testů: identifikujte datovou plochu, zaznamenejte uživatelskou bránu a pak sledujte, zda se deklarovaná cesta skutečně používá.
Jak číst vlastní manifest
Související čtení: browser automation guide.
chrome://extensions→ Details zobrazuje udělený přístup ke stránkám a umožňuje přepnout ho na on click u všeho, co nepotřebuje trvalý přístup. Tím zúžíte stránkový přístup z toho, co je výše. Netýká se to ale příchozího messagingu (externally_connectablemíří na service worker bez ohledu na to) ani oprávnění na úrovni prohlížeče. Thunderbitova deklaracedebuggerje zde důležitá. Bezpečnostní dokumentace Chromia k rozšířením říká, že debugger API „may in some cases also sidestep other typical restrictions, such as host permissions or file access“, takže nastavení přístupu k webu na „on click“ neomezuje, k čemu může sáhnout. Tohle ovládání se navíc netýkátabs,webNavigation,clipboardRead,downloadsani čehokoli voptional_permissions.- Pro samotný soubor platí, že balíček leží v adresáři Chrome
Extensions/<id>/<version>/. Čtěte šest polí:permissions,optional_permissions,host_permissions,content_scripts(tedymatches,run_ataall_framesuvnitř),externally_connectable— s tím, že nepřítomný klíč je pro extension callers benevolentní — aweb_accessible_resources, jejichžmatchesmohou pojmenovat schémata, která content scripts nikdy nepokrývají. Thunderbitovo poslední pole obsahuje dvě položky<all_urls>, které zpřístupňujíindex.htmla dva přibalené skripty každému originu, suse_dynamic_url: false, což umožňuje stránce zjistit, zda se tyto stabilní extension URL resolvují. - Zkontrolujte datum poslední aktualizace v listingu vůči aktuální verzi Chromu.
Zveřejnění a zdroje: tento článek vydává Thunderbit, jehož rozšíření je zahrnuto ve stejné tabulce i parseru. Náš open-source scraper pillar pokrývá ne-rozšířené nástroje.
Vyzkoušet Thunderbit pro extrakci webových dat
Stručná verze
Deset rozšíření pro scraping a automatizaci, včetně našeho, bylo přečteno přímo z jejich vlastních manifestů.
Agenty neuvádí žádný přístup ke stránkám ani žádné content scripts, funguje jen na kartě, na kterou kliknete, a má 2,2 MiB. Axiom.ai deklaruje každou HTTP a HTTPS URL napříč 37,1 MiB. Magical deklaruje třináct oprávnění včetně clipboardRead — a zároveň je to jediné rozšíření zde, které zcela uzavírá příchozí messaging. Table Capture deklaruje jen čtyři oprávnění a injektuje se v document_start do všech rámců na <all_urls> — tedy na stejný rozsah stránek jako my, jen dříve — plus userScripts na vyžádání. TexAu je nejmenší a jmenuje nejvíc cílů — čtrnáct vzorů přes třináct různých vlastností. Není ale jediné, které je jmenuje: Clip to Clay deklaruje dvě (clay.com a jeden third-party web) a Hexomatic i Clay for Chrome jmenují své vlastní domény. TexAu je jediné, jehož pojmenovaný seznam tvoří převážně domény jiných lidí. Pět z deseti může dosáhnout na soubory na vašem disku, přičemž dvě z nich — Axiom.ai a my — nikdy nikde file:// ani nenapíšou.
Thunderbit, tedy naše rozšíření, stojí na širším konci: <all_urls> pro host access i statickou injektáž, plus debugger, které žádné jiné rozšíření v této sadě nedeklaruje. Zároveň je na výchozím nastavení Chromu, které povoluje zprávy od jakéhokoli rozšíření, a po zapnutí chromí brány pro přístup k souborům dosáhne i na file://.
Deklarace je strop, ne chování, a nic z toho neukazuje zneužití. Je to ale veřejné, zdarma ověřitelné a rozdíl mezi oběma konci je větší než cokoli na produktových stránkách.
Vyzkoušet Thunderbit pro extrakci webových dat Get Started Free
Časté dotazy
Znamená široké oprávnění, že rozšíření dělá něco špatně — a proč nestačí počítat oprávnění?
Ne. A počet nestačí, protože míjí dvě věci. <all_urls> znamená, že rozšíření smí číst každou stránku, kterou navštívíte; neříká nic o tom, co skutečně dělá nebo zda něco odchází z vašeho počítače. Nástroj postavený na extrakci dat z libovolné stránky zkrátka nemůže fungovat z allowlistu pojmenovaných domén. Zjištění je v rozptylu, ne v pochybení — skutečné chování by vyžadovalo runtime analýzu provozu, kterou tento audit neprováděl. A co se týče počtu: nastavení injektáže nejsou oprávnění, takže Table Capture deklaruje čtyři, a přitom injektuje v document_start, do all_frames, na <all_urls>. A optional_permissions se vůbec neobjeví v instalačním promptu — Table Capture si může za běhu vyžádat userScripts, což dovoluje spouštět libovolné uživatelské skripty v kontextu stránky, a Magical může požádat o webRequest.
Které z nich chce nejméně?
Agenty: čtyři oprávnění, žádná host permissions, žádné content scripts. Spoléhá na activeTab, které dává přístup k aktuální kartě jen po kliknutí na rozšíření a jen do chvíle, než odejdete jinam. Hned za ním je Hexomatic, se dvěma oprávněními a content scripts omezenými na jeho vlastní domény.
Jak může rozšíření dosáhnout na moje lokální soubory, aniž by deklarovalo file://?
Protože <all_urls> zahrnuje schéma file:. Listly, Magical a Table Capture file:// pojmenovávají přímo — Magical v content scripts a Table Capture v web_accessible_resources. Axiom.ai a Thunderbit se k němu dostanou přes wildcard, aniž by ho někde napsaly. http://*/* a https://*/* file:// nepokrývají. Chrome drží přístup k souborům ve výchozím stavu vypnutý za přepínačem na úrovni rozšíření, takže deklarace je žádost, ne povolení.
Co je externally_connectable a proč je jeho vynechání benevolentní volba?
Určuje webové originy nebo ID rozšíření, které mohou posílat zprávy do background scriptu rozšíření. Výchozí chování Chromu, když klíč chybí, je, že se může připojit jakékoli rozšíření a žádná webová stránka ne. Sedm z těchto deseti ho vynechává, včetně Thunderbit. S klíčem přítomným Hexomatic otevírá kanál pro rozšíření osmi jmenovaným ID; Axiom.ai otevírá sedm webových originů a kanál pro rozšíření nechává uzavřený; Magical deklaruje prázdné seznamy pro oba kanály a oba uzavírá.
Co deklaruje vlastní manifest Thunderbitu?
<all_urls> pro host access a statickou injektáž content scriptů, v all_frames na document_end; 15,9 MiB ve 78 souborech; a devět řetězců v poli oprávnění. Osm z nich je rozpoznaných jako oprávnění: activeTab, debugger, offscreen, scripting, sidePanel, storage, tabGroups a tabs. commands je klíč na nejvyšší úrovni manifestu a v tomto poli nemá žádný efekt. Žádné jiné rozšíření v této sadě debugger nedeklaruje. Thunderbit se také dostane k file:// přes <all_urls> po zapnutí chromí brány pro přístup k souborům a vynechává externally_connectable. Runtime chování nebylo spuštěno, takže audit netvrdí, která CDP nebo scripting API rozšíření skutečně volá.


