כל Chrome תוסף כולל קובץ manifest.json שמגדיר חלק משמעותי מיכולת הפעולה שלו ברמת הדפדפן: ממשקי API מבוקשים, דפוסי host, סקריפטי תוכן סטטיים, הרשאות אופציונליות וחיבורים חיצוניים שמותר לקיים. זהו קובץ ציבורי שנמצא בחבילה שמתקינים. הוא לא מוכיח אילו מהיכולות המוצהרות הקוד מנצל בפועל, מה יוצא מהמחשב, או אילו גישות לחשבון מתבצעות דרך כניסה נפרדת לאתר.
עברתי על עשרת התוספים ל־scraping ואוטומציה בדפדפן שנבחרו לביקורת הזו, כולל Thunderbit שלנו. הפערים גדולים מאוד. אחד לא מצהיר על גישת אתר קבועה בכלל. אחר מצהיר על שלוש־עשרה הרשאות, כולל clipboardRead. Thunderbit הוא התוסף היחיד בקבוצה הזו שמצהיר על debugger — יכולת רחבה לחיבור CDP, עם פרופיל סיכון שונה מגישת עמוד, OAuth או סקריפטים שמסופקים על ידי המשתמש.
זה לא טיעון מאשים. הרשאה רחבה היא לעיתים הדרך היחידה והכנה לבנות פיצ’ר מסוים, והרשאה מצומצמת יכולה פשוט להעיד שהמוצר עושה פחות. הנקודה היא שההבדל עצום, הוא מפורסם, והוא אף פעם לא נכנס לטבלת השוואה.
איך זה נעשה
כל תוסף הורד כקובץ .crx מנקודת העדכון של Google עצמה — בדיוק אותו URL ש‑Chrome משתמש בו — ואז נפרק ונבדק. לא הותקן אף תוסף ולא הורץ אף קוד של תוסף. זו קריאה של קובץ JSON.
ההורדות בוצעו בקצב של בקשה בערך כל שתי שניות. כל .crx, ה‑SHA-256 שלו ו־manifest.json שחולץ נשמרו כארטיפקטים. Thunderbit עבר את אותו סקריפט כמו תשעת האחרים, בלי מסלול צדדי, ולכן השורה שלו נגזרת בדיוק כמו שלהם.
הניתוח נשען על שתי משפחות ראיות ושומר עליהן בנפרד:
- התנהגות סטטית מוצהרת: דפוסי host וערכי
content_scripts, כוללmatches,run_atו־all_frames. - יכולת שזמינה לקוד בזמן ריצה: APIs שמופיעים ב־
permissionsאוoptional_permissions. ההצהרות האלה מראות מה הקוד יכול לבקש או להפעיל, לא שהוא אכן עושה זאת.
לא ניתן כאן ציון סדרתי של "הכי עוצמתי". debugger, userScripts, גישת host רחבה, היקפי OAuth, גישת clipboard והודעות חיצוניות — כל אלה חושפים סוגי נתונים שונים ודורשים תנאים מקדימים שונים. כדי להשוות ביניהם צריך מודל איום שהביקורת הזו, שמבוססת רק על manifest, לא מספקת.
הגדלים שלהלן הם סך הכול לאחר פירוק, ב־MiB (2²⁰ bytes), מסוכמים מתוך ערכי ה‑ZIP.
נכון ל־2026-07-29. תוספים מתעדכנים; כדאי לבדוק שוב לפני ציטוט.
מה עשרת המניפסטים מצהירים

מקור רשמי: המדריך של Chrome להצהרת הרשאות.
| תוסף | גרסה | ללא דחיסה | קבצים | הרשאות | גישת אתר | מגיע ל-file:// |
|---|---|---|---|---|---|---|
| Axiom.ai | 5.1.0 | 37.1 MiB | 232 | 8 | http://*/* + https://*/* | ✅ |
| Table Capture | 11.0.41 | 21.1 MiB | 115 | 4 (+3 אופציונליות) | <all_urls> | ✅ |
| Magical | 3.119.1 | 16.8 MiB | 395 | 13 (+2 אופציונליות) | <all_urls> | ✅ |
| Thunderbit (שלנו) | 4.6.4 | 15.9 MiB | 78 | 8 מזוהות (+1 מחרוזת מערך לא מזוהה: commands) | <all_urls> | ✅ |
| Clay for Chrome | 1.0.0 | 6.3 MiB | 51 | 6 | *://*/* (מזריק רק בדומיין שלו) | — |
| Listly | 0.9.6 | 3.5 MiB | 84 | 7 | http://*/*, https://*/*, file:///*.html | ✅ |
| Hexomatic | 1.8.4 | 2.7 MiB | 37 | 2 | דומיינים משלו בלבד | — |
| Agenty | 2.9.7 | 2.2 MiB | 49 | 4 | ללא הצהרת גישת אתר | — |
| Clip to Clay | 1.8.0 | 0.7 MiB | 16 | 4 | 2 דומיינים בשם | — |
| TexAu v2 | 1.6.6 | 0.3 MiB | 12 | 6 | 14 דומיינים בשם | — |
עוד שניים היו ברשימת המועמדים ולא נכנסו לטבלה, מסיבות שכדאי לדווח עליהן בפני עצמן.
הפער הוא בחירה עיצובית, לא תוצאה של גודל
Agenty לא מצהיר על הרשאות host בכלל ולא כולל content scripts. ארבע ההרשאות שלו הן activeTab, scripting, identity ו־identity.email. activeTab הוא ההרשאה המצומצמת: היא מעניקה גישה ללשונית הנוכחית רק אחרי שלוחצים על התוסף, ורק עד שעוזבים את הדף. שום דבר לא רץ על העמודים שלך אלא אם מפעילים אותו. וכל זה ב־2.2 MiB.
Axiom.ai מצהיר על http://*/* ו־https://*/*, מזריק content scripts שתואמים ל־<all_urls>, ונפרש ל־37.1 MiB על פני 232 קבצים — פי שבעה־עשר מגודלו של Agenty, עם גישה קבועה לכל עמוד שבו תבקר.
Hexomatic דומה יותר ל‑Agenty: שתי הרשאות (storage, tabs), בלי הרשאות host, ו־content scripts שמוגבלים לשני הדומיינים שלו בלבד.
Clay for Chrome הוא צורה שלישית שכדאי להפריד: הוא מצהיר על *://*/* כהרשאת host אבל מזריק content scripts רק בדומיין שלו. היכולת הקבועה רחבה; ההתנהגות האוטומטית מצומצמת. טבלת הרשאות לבדה מערבבת בין השניים.
חמישה מתוך עשרת התוספים יכולים להגיע לקבצים במחשב שלך
file:/// הוא לא אתר. זו מערכת הקבצים המקומית שלך שמוצגת בכרטיסיית דפדפן — PDF שפתחת, ייצוא HTML, חשבונית שהורדת.
מקור רשמי: תיעוד ה־match patterns של Chrome.
שלושה תוספים אומרים זאת מפורשות. שניים מגיעים לשם בלי לציין זאת בשם: <all_urls> כולל את הסכמה file:.
| תוסף | איך הוא מגיע ל-file:// | האם הוא מציין file:// במניפסט? | היכן |
|---|---|---|---|
| Magical | תואם ל-file:///* — כל קובץ מקומי ש‑Chrome יציג, לא רק HTML — בארבע מתוך שש רשומות ה‑content script שלו | ✅ | content scripts ו־web_accessible_resources |
| Listly | תואם ל-file:///*.html | ✅ | content scripts |
| Table Capture | content scripts על <all_urls>, וגם מציין את הסכמה | ✅ | web_accessible_resources |
| Axiom.ai | בזכות wildcard של <all_urls> בלבד | — | לא מצוין |
| Thunderbit (שלנו) | בזכות wildcard של <all_urls> בלבד | — | לא מצוין |
http://*/* ו־https://*/* לא מכסים את file://; גם <all_urls> ו־*://*/* שונים בזה.
חמשת אלה הם אלה שהצהרותיהם מגיעות לסכמה באחד המסלולים — לא בגלל צורת ה‑wildcard שבחרו.
Chrome מעביר את זה דרך מתג נפרד לכל תוסף בשם "Allow access to file URLs" שמוגדר כבוי כברירת מחדל, כך שההצהרה היא בקשה ולא הענקה. חמישה מתוך עשרה הוא הספירה הכנה, ושניים מתוך החמישה האלה לא כותבים file:// בשום מקום במניפסט: Axiom.ai ושלנו.
הספירה הזו כוללת גם את web_accessible_resources, לא רק content scripts והרשאות host. Table Capture מציין שם file://*/*; בלי הבלוק הזה הוא היה מסווג בטעות לצד תוספים שהמניפסט שלהם מגיע לקבצים בלי לציין את הסכמה.
הרשאות שלא רואים עד שמבקשים אותן

optional_permissions מוצהרות מראש אבל נדרשות בזמן ריצה, ולכן לא מופיעות בהודעת ההתקנה. שני תוספים משתמשים בהן, ואחת מההרשאות משמעותית במיוחד.
| תוסף | optional_permissions | ההרשאה החשובה |
|---|---|---|
| Table Capture | userScripts, downloads, identity | userScripts יכולה להריץ סקריפטים שמסופקים על ידי המשתמש בהקשר של הדף אחרי ש‑Chrome מפעיל את השער שלו |
| Magical | downloads, webRequest | webRequest עוקבת אחרי תעבורת רשת |
userScripts לא מופיעה עד שמבקשים אותה, והיא בלתי נראית לכל מי שסופר רק את ההרשאות.
יש לה גם שער אבטחה שלא קיים אצל שאר ההרשאות בביקורת הזו, והשמטה שלו הייתה מציגה אותה כחזקה יותר ממה שהיא. די בהצהרה על userScripts כדי להשתמש בה: Chrome דורש קודם פעולה מפורשת של המשתמש. לפני Chrome 138 זו הייתה Developer Mode, שהופעלה גלובלית ב־chrome://extensions. החל מ‑Chrome 138 זהו מתג נפרד לכל תוסף בשם Allow User Scripts בדף הפרטים של אותו תוסף, כבוי כברירת מחדל. לכן בהתקנה רגילה היכולת מוצהרת אבל לא פעילה. הניסוח המדויק הוא מותנה: Table Capture יכול להעמיד את ה‑userScripts API לרשותו אחרי שהמשתמש מפעיל את שער Chrome. בביקורת הזו לא נמדד באיזו תדירות משתמשים נכנסים לדף ההגדרות הזה או מפעילים את המתג.
אף אחת מהן לא מוסתרת; שתיהן במניפסט. טבלה שמתעלמת מהבלוק האופציונלי ממעיטה בשני מוצרים.
תזמון הזרקה, לא רק היקף
איך content script מוזרק משפיע על התמונה לא פחות מאיפה. document_start הוא ה־hook המוקדם ביותר ש‑Chrome מציע; all_frames מגיע גם להטמעות של צד שלישי.
כל מה שבקבוצה שמזריק סטטית לכל המסגרות, לפי תזמון מוצהר:
| תוסף | run_at | all_frames | דפוס התאמת content-script |
|---|---|---|---|
| Table Capture | document_start | ✅ | <all_urls> |
| Listly | document_start | ✅ | file:///*.html וגם כל http ו‑https |
| Axiom.ai | document_start | ✅ | דומיינים משלו בלבד |
| Clay for Chrome | document_start | ✅ | דומיינים משלו בלבד |
| Thunderbit (שלנו) | document_end | ✅ | <all_urls> |
| Magical | document_idle | ✅ | file:///* וגם http ו‑https רחבים |
| TexAu | document_idle (לא מוגדר) | ✅ | ארבעה־עשר דפוסים בשם |
Table Capture ו‑Listly מפעילים את ה‑hook המוקדם ביותר על פני התאמות רחבות. Axiom.ai ו‑Clay for Chrome משתמשים באותו תזמון אבל רק בדומיינים שלהם — אותה אגרסיביות, יעד צר.
להצהרות סטטיות, <all_urls> יחד עם all_frames הוא תקרת רוחב ההתאמה, ושני Table Capture ו‑Thunderbit נמצאים שם. התזמון המוצהר שלהם שונה: Table Capture משתמש ב־document_start; ה־content script הסטטי של Thunderbit משתמש ב־document_end. APIs בזמן ריצה הם קטגוריית יכולת נפרדת, ולא ניתן להסיק אותם מהטבלה הזו.
ספירת ההרשאות היא מדד סיכום גרוע. Table Capture מצהיר על ארבע הרשאות — פחות מרוב היתר — אבל מזריק ב־document_start לכל המסגרות על <all_urls>, ובנוסף על userScripts לפי בקשה.
מי רשאי לשלוח הודעות לתוסף
externally_connectable קובע אילו דפי אינטרנט או תוספים אחרים יכולים לשלוח הודעות ישירות ל־background script של התוסף. ברירת המחדל שלו אינטואיטיבית לאחור.
השמטת המפתח היא ההגדרה הפתוחה. ברירת המחדל של Chrome כאשר externally_connectable חסר היא שכל תוסף יכול להתחבר, אבל אף דף אינטרנט לא יכול. הצהרה עליו היא הדרך לצמצם.
בהתבסס על זה, הטבלה מתהפכת:
| תוסף | הצהרת externally_connectable | מי יכול לשלוח לו הודעות |
|---|---|---|
| Agenty | הושמט | ברירת מחדל פתוחה — כל תוסף יכול להתחבר, אף דף אינטרנט לא |
| Clay for Chrome | הושמט | ברירת מחדל פתוחה — כל תוסף יכול להתחבר, אף דף אינטרנט לא |
| Clip to Clay | הושמט | ברירת מחדל פתוחה — כל תוסף יכול להתחבר, אף דף אינטרנט לא |
| Listly | הושמט | ברירת מחדל פתוחה — כל תוסף יכול להתחבר, אף דף אינטרנט לא |
| Table Capture | הושמט | ברירת מחדל פתוחה — כל תוסף יכול להתחבר, אף דף אינטרנט לא |
| TexAu | הושמט | ברירת מחדל פתוחה — כל תוסף יכול להתחבר, אף דף אינטרנט לא |
| Thunderbit (שלנו) | הושמט | ברירת מחדל פתוחה — כל תוסף יכול להתחבר, אף דף אינטרנט לא |
| Hexomatic | שמונה מזהי תוסף וגם שש כתובות web origin | פותח את שני הערוצים ממצב סגור |
| Axiom.ai | שבע כתובות web origin, בלי ids | ערוץ התוספים סגור, שבעה דפי אינטרנט פתוחים |
| Magical | {"ids": [], "matches": []} | היחיד כאן שסוגר במפורש את שני הערוצים |
לכלל של Chrome יש שתי רמות. מתוך תיעוד ה־manifest:
| מצב | מי רשאי להתחבר |
|---|---|
| כל המפתח חסר | "all extensions can connect, but no web pages can connect" |
המפתח קיים, ids לא מוגדר או [] | "no extensions or apps can connect" |
המפתח קיים, matches לא מוגדר או [] | "no web pages can connect" |
ברירת המחדל הפתוחה קשורה להיעדר כל המפתח. ברגע שהמפתח קיים, שני תתי־השדות מתחילים סגורים, והוספת ערכים מרחיבה כל ערוץ.
Axiom.ai מצהיר על המפתח עם matches בלבד. לכן ids שלו לא מוגדר, מה שאומר שאף תוסף לא יכול לשלוח לו הודעות — ערוץ התוספים סגור, לא פתוח. מה שהוא כן פתח הוא שבעה מקורות web, שרק אחד מהם הוא דומיין של Axiom: שניים הם צדדים שלישיים שאי אפשר לייחס לו (*://*.tgwc.space/*, *://*.bitmachine.co.uk/*) והשאר הם localhost, 0.0.0.0, host של Google APIs, ופלטפורמת social גדולה שאינה מופעלת על ידו.
Hexomatic פותח את ערוץ התוספים לשמונה מזהי תוסף בשם. עם המפתח קיים, נקודת הפתיחה היא אפס תוספים; הוספת שמונה מרחיבה לשמונה. שש ה־matches שלו מרחיבות את הערוץ השני מאפס, ושניים מהם הם http://localhost:8000/* ו־http://localhost:3000/* על HTTP רגיל — כל דבר שמאזין בפורטים האלה במחשב של המשתמש נמצא בתוך רשימת ההיתר.
שבעה מתוך העשרה משמיטים את המפתח לגמרי, כולל שלנו, ואלה השבעה שנמצאים בברירת המחדל הפתוחה לתקשורת בין תוספים. שני תוספים סוגרים את הערוץ הזה: Magical במפורש עם ids: [], ו‑Axiom.ai על ידי הצהרה על המפתח בלי לציין ids. Magical הוא היחיד שסוגר שני הערוצים.
השורה האחרונה הזו היא הסיבה לקרוא מניפסטים במקום לספור הרשאות. אותו תוסף יכול להיות רחב בציר אחד והמחמיר ביותר בקבוצה אחר ציר אחר.
הציר שאף אחד לא סופר: היקפי OAuth
מניפסט יכול לכלול בלוק oauth2, וה־scopes שבו הם גישה לחשבונות שלך אצל חברות אחרות — סוג אחר לגמרי של הגעה, כזה שספירת הרשאות לא משקפת.
מקור רשמי: רשימת ה‑scopes של Google OAuth 2.0.
| תוסף | היקפי oauth2 מבוקשים |
|---|---|
| Axiom.ai | openid, email, profile, auth/drive, auth/spreadsheets |
| Table Capture | auth/spreadsheets, auth/userinfo.email |
| Agenty | openid, email, profile |
| שבעת האחרים, כולל שלנו | ללא הצהרה |
https://www.googleapis.com/auth/drive הוא ההיקף הרחב. Google מציעה היקף צר יותר,
drive.file, שמעניק גישה רק לקבצים שהאפליקציה עצמה יצרה או שהמשתמש בחר במפורש; auth/drive מאפשר לראות, לערוך, ליצור ולמחוק בכל ה‑Drive של המשתמש. auth/spreadsheets הוא באותו מבנה עבור כל גיליון שהחשבון יכול להגיע אליו. גם Axiom.ai וגם Table Capture מצרפים היקף של חשבון Google לגישת עמודים ב־<all_urls>.
שתי מגבלות על מה שהטבלה הזו מוכיחה. scope הוא מבוקש, לא מוענק — Google מציגה מסך הסכמה והמשתמש יכול לסרב, וגם ייתכן שהתוסף בכלל לא יקרא ל‑API. והמניפסט רואה רק OAuth שעובר דרך זרימת identity של Chrome; תוסף שמפנה אותך במקום זה לדף כניסה באתר לא יצהיר כאן כלום. שבעת האפסים משמעותם "לא נתבקש בקובץ הזה", לא "אין גישה לחשבון Google שלך" — כולל שלנו, ולכן הציר הזה מדווח ולא נטען כצמצום.
התוסף שלנו, באותה סקאלה
Thunderbit 4.6.4 עבר את אותו מנתח manifest כמו תשעת האחרים. החבילה היא 15.9 MiB לאחר פירוק, על פני 78 קבצים.
התנהגות סטטית מוצהרת: <all_urls> מופיע בהרשאות host וגם בהתאמות של content scripts. הסקריפט הסטטי רץ ב־all_frames ב־document_end. מאחר ש־<all_urls> כולל file:, המניפסט יכול להגיע לקבצים מקומיים אחרי שהמשתמש מפעיל את מתג הגישה לקבצים של Chrome. Thunderbit גם משמיט את externally_connectable, ולכן ברירת המחדל של Chrome מאפשרת הודעות מכל תוסף אבל לא משום דף אינטרנט.
תקרת יכולת בזמן ריצה: מערך permissions מכיל תשע מחרוזות: activeTab, commands, debugger, offscreen, scripting, sidePanel, storage, tabGroups ו־tabs. Chrome מזהה שמונה מהן כהרשאות; commands הוא מפתח manifest ברמה העליונה ואין לו השפעה כשהוא מופיע כערך במערך הזה. Thunderbit הוא התוסף היחיד בקבוצה שמצהיר על debugger, שיכול לצרף CDP ללשונית. המניפסט גם מעמיד לרשותו את scripting לרישום בזמן ריצה. ה־APIs האלה יוצרות יכולות מעבר לשורת ה־document_end הסטטית, אבל קריאת manifest לא יכולה לקבוע אם Thunderbit מפעיל מתודת CDP מסוימת או רושם סקריפט בשלב מוקדם יותר.
ההבחנה הזו חוסמת כמה השוואות מפתות אבל שגויות. היעדר הרשאת cookies מצומצמת יותר לא מגביל מה קוד עם debugger עשוי לגשת אליו. היעדר clipboardRead אינו הוכחה שגישה ללוח גזירה בלתי אפשרית. מצד שני, נוכחות של debugger אינה ראיה לכך שהמסלולים האלה אכן בשימוש. כדי לענות על שאלות כאלה צריך בדיקת source או tracing בזמן ריצה, ולא בוצע כאן אף אחד מהם.
בכלי הזה, Thunderbit רחב בגישת אתר סטטית, ייחודי בקבוצה הזו בכך שהוא מצהיר על debugger, ונמצא בברירת המחדל של Chrome לתקשורת בין תוספים. אין דירוג יחיד של "החזק ביותר" כי הביקורת לא מספקת מודל איום אחיד על פני CDP, OAuth, userScripts, clipboard וגישת host.
העיצוב המאופק שאף אחד לא משווק
TexAu הוא 0.3 MiB — הקטן כאן בפער של פי שניים — והוא מציין ארבעה־עשר אתרים ספציפיים במקום wildcard: רשתות חברתיות, פלטפורמת מפתחים, פלטפורמות פרסום, מוצר צ’אט, ספק נתונים עסקיים והדומיין שלו. גם ה־content scripts שלו תואמים בדיוק לאותם ארבעה־עשר.
אפשר לקרוא את המניפסט הזה ולדעת בדיוק היכן התוסף פעיל. זו גם חשיפה של המוצר — רשימת היעדים אומרת בפשטות רבה יותר למה הכלי מיועד מאשר השיווק שלו.
הפשרה אמיתית: רשימה בשם לא יכולה לסרוק אתר שלא נמצא בה, וכל יעד חדש דורש שחרור גרסה. אבל "ארבעה־עשר דומיינים בשם" ו־"כל URL שקיים" הם שני דברים שונים מאוד, ורק אחד מהם קריא.
שני מוצרים שלא היו מה שהרשימה אמרה
התוסף של Captain Data אינו מופץ לציבור. נקודת העדכון של Google מחזירה HTTP 204 עם גוף ריק עבור מזהה התוסף שלו — התגובה שמתאימה למשהו שהחנות לא תשרת באופן אנונימי. לעומת זאת, דף הרישום שלו כן הוגש באופן אנונימי — HTTP 200, 509,829 bytes. מה שהלכידה לא הצליחה למצוא בו היה מחרוזת גרסה, תאריך עדכון אחרון או מספר התקנות; ההערות של הסקריפט עצמן אומרות ש־null שם הוא ראיה חלשה, ולא נצפתה חומת כניסה. המזהה אמיתי ושייך לצד הראשון, ולכן ההסבר הסביר ביותר הוא הפצה רק דרך קישור או ללא רישום פומבי, אבל לא יכולתי להבדיל זאת מהסרה מהרשימה ולכן לא אנחש.
Dataflow Kit כלל אינו כולל תוסף Chrome. האתר שלו מתאר אפליקציית web מתארחת עם בחירה בלחיצה וממשק REST API. הוא עדיין הופיע ברשימת מועמדים לתוסף Chrome — וכך בדרך כלל נבנות רשימות כאלה.
עדכניות והיקף, כי שניהם קלים לבדיקה
מטא־דאטה של החנות מוסיפה הקשר לבחירת מוצר מעבר להרשאות. אותם שדות נאספו לכל התוספים ב־2026-07-30.
| תוסף | גרסת החנות | עדכון אחרון | דלי התקנות |
|---|---|---|---|
| Thunderbit (שלנו) | 4.6.4 | 28 ביולי 2026 | 200,000 |
| Listly | 0.9.6 | 25 ביולי 2026 | 100,000 |
| Axiom.ai | 5.1.0 | 20 ביולי 2026 | 100,000 |
| Table Capture | 11.0.41 | 26 ביוני 2026 | 200,000 |
| Magical | 3.119.1 | 4 באפריל 2026 | 200,000 |
| Agenty | 2.9.7 | 8 בפברואר 2026 | 10,000 |
| TexAu | 1.6.6 | 20 באוגוסט 2025 | 7,000 |
| Clay for Chrome | 1.0.0 | 9 באפריל 2025 | 10,000 |
| Clip to Clay | 1.8.0 | 8 באפריל 2025 | 1,000 |
| Hexomatic | 1.8.4 | 6 בספטמבר 2024 | 3,000 |
| Captain Data | — | — | לא זמין לציבור |
שלושה מוצרים לא שוחררו כבר יותר משנה, ו‑Hexomatic כמעט שנתיים. עבור תוספים זה חשוב יותר מאשר עבור ספריות: Chrome מוציא גרסה יציבה בערך כל ארבעה שבועות, ופלטפורמת התוספים עצמה משתנה כל הזמן מתחתיה. userScripts שינתה את שער המשתמש שלה ב‑Chrome 138; תוסף ששוחרר לאחרונה ב‑2024 נבנה מול מערכת חוקים אחרת מזו שהדפדפן כופה עכשיו.
שני דברים שהטבלה הזו אינה. מספרי ההתקנות הם בדליים של Google — 1,000 / 3,000 / 7,000 / 10,000 / 100,000 / 200,000 — כך שהם משווים סדרי גודל בלבד, ויש מוצרים שמפרסמים מספרים גדולים יותר בשיווק שלהם. תאריך עדכני הוא עובדה על שחרור גרסה, לא פסק דין על איכות תחזוקה או סיכון בהרשאות.
תוצר לוואי שימושי אחד: גרסת החנות תואמת לגרסת המניפסט בכל אחד מעשרת החבילות שנותחו. קבצי ה‑CRX שהביקורת הזו פיענחה הם אלה שהחנות מגישה היום, לא עותקים ישנים.
עדכניות משנה את כמות העבודה ההשלמתית שמגיע לתוסף; היא לא משנה את הסמנטיקה של המניפסט. תוסף עם דומיינים בשם שעודכן לפני שנה עשוי עדיין לחשוף פחות משטח דף מתוסף wildcard ששוחרר אתמול. החבילה החדשה יותר עדיין יכולה להיות הבחירה התפעולית הטובה יותר אם היא מתעדכנת לשינויים ב‑Chrome בזמן. לרשימת מועמדים, השתמשו בתאריך החנות כדי להחליט מה לבדוק מחדש, ואז במניפסט כדי להחליט מה דורש סקירת יכולות מעמיקה יותר. אל תהפכו את שתי העמודות לציון אחד.
מה מניפסט לא מספר לכם
הרשאה מוצהרת היא תקרה, לא התנהגות. <all_urls> אומר שתוסף יכול לקרוא כל עמוד. זה לא אומר שהוא אכן עושה זאת, או שמשהו בכלל יוצא מהמחשב שלך. כדי לקבוע מה באמת קורה צריך לעקוב אחרי תעבורת רשת בזמן ריצה — עבודה אחרת, שלא בוצעה כאן, ואין לקרוא שום דבר למעלה כראיה לשימוש לרעה.
סקירה קשורה: ניסוי בדיקות לתוסף Chrome.
שלוש מגבלות נוספות:
- Chrome מציב שערים לרוב הדברים האלה. גישת קבצים כבויה כברירת מחדל;
activeTabצרה במכוון; הרשאות אופציונליות דורשות prompt בזמן ריצה; משתמשים רואים רשימת הרשאות בעת ההתקנה. - הרשאות רחבות נדרשות לעיתים קרובות. כלי שמטרתו היא "לחלץ טבלה מכל עמוד שבו אתה נמצא" לא יכול לעבוד מרשימת דומיינים בשם. היקף צר הוא לפעמים משמעת ולפעמים פשוט מוצר קטן יותר.
- גרסה אחת, יום אחד. כל הנתונים כאן הם מהחבילה שהוגשה ב־2026-07-29.
תיקונים מהותיים בניתוח
הספירות שפורסמו משתמשות בשלושה כללים שקל לטעות בהם כשכותבים מנתח manifest מהיר. ראשית, <all_urls> כולל את הסכמה file:, אבל Chrome שומר את גישת הקבצים בפועל מאחורי מתג שנשלט על ידי המשתמש. שנית, צריך לבדוק את web_accessible_resources.matches יחד עם content scripts והרשאות host; שם Table Capture מציין במפורש את file://*/*. שלישית, ל־externally_connectable יש ברירות מחדל שונות לפי האם כל המפתח חסר או שהוא קיים עם תת־שדה ריק. הטבלאות שלמעלה מיישמות את הכללים האלה באופן עקבי.
סך ההרשאות של Thunderbit גם מבחין בין מחרוזות גולמיות לבין הרשאות Chrome מזוהות. המערך שלו כולל תשע רשומות, אבל commands שייך לרמה העליונה, ולכן הספירה האפקטיבית כאן היא שמונה הרשאות מזוהות ועוד מחרוזת לא מזוהה אחת. לבסוף, הצהרות content_scripts סטטיות אינן ראיה לכך שהקוד קורא ל־scripting.registerContentScripts או למתודת CDP. האפשרויות האלה מופיעות רק תחת יכולת בזמן ריצה, לא כהתנהגות שנצפתה. המניפסטים הגולמיים, ה־CRX hashes ופלט המנתח הם שביל הביקורת לנירמולים האלה, כך שהקוראים לא צריכים לסמוך על הנוסח בלבד.
לקבלת החלטה אמיתית על התקנה, השוו לפחות ארבעה ממדים בנפרד: אילו עמודים כלולים כברירת מחדל, איזו פעולה מפורשת של המשתמש פותחת גישה נוספת, אילו APIs של הדפדפן או החשבון נעשות זמינות, ואילו גורמים חיצוניים יכולים לשלוח הודעות לתוסף. המודל של activeTab ב‑Agenty, ה־userScripts המוגן של Table Capture, ה‑Drive scope של Axiom.ai והצהרת debugger של Thunderbit אינם נקודות על סולם אחד. הן תשובות שונות לשאלות איום שונות.
כך נראית ההשוואה הזו עבור ארבעה עיצובים שונים במכוון:
| תוסף | היקף עמודים הנראה במניפסט | שער נוסף | יכולת שאינה עמודית בביקורת הזו | מצב הפונים החיצוניים |
|---|---|---|---|---|
| Agenty | ללא הרשאת host או content script סטטי | המשתמש מפעיל activeTab על הלשונית הנוכחית | הרשאות זהות של Chrome | המפתח הושמט: כל תוסף יכול להתחבר, שום דף אינטרנט לא יכול |
| Table Capture | סקריפטים סטטיים על <all_urls> בכל המסגרות ב־document_start | גישת קבצים כבויה כברירת מחדל; userScripts דורש את שער המשתמש הנפרד של Chrome | userScripts, downloads ו־identity אופציונליות | המפתח הושמט: כל תוסף יכול להתחבר, שום דף אינטרנט לא יכול |
| Axiom.ai | גישת wildcard ל־HTTP ו‑HTTPS; סקריפטים סטטיים ב־document_start בדומיינים שלו | הסכמה של OAuth להיקפי Google המבוקשים | היקפי OAuth של Drive ושל Sheets מוצהרים | ערוץ התוספים סגור; שבעה web origins פתוחים |
| Thunderbit | גישת <all_urls> ו־content scripts סטטיים בכל המסגרות ב־document_end | גישת קבצים כבויה כברירת מחדל; צירוף debugger כפוף להתנהגות הנראית למשתמש שנשלטת על ידי Chrome | debugger, scripting, tabs ו־APIs דפדפניות רלוונטיות מוצהרות | המפתח הושמט: כל תוסף יכול להתחבר, שום דף אינטרנט לא יכול |
גם הטבלה הזו לא מייצרת מנצח. גישת העמוד המצומצמת של Agenty לא אומרת דבר על מה שה‑backend שלו עושה עם הנתונים שנשלחים. היקפי החשבון של Axiom.ai אינם ברי השוואה לקריאת העמוד הנוכחי על ידי תוסף. ההצהרה של Table Capture על userScripts נשארת אינרטית עד שהמשתמש מפעיל את השער הנפרד. הרשאת debugger של Thunderbit חושפת משטח רחב לשליטה בדפדפן, אבל המניפסט לא מגלה אילו domains או מתודות CDP הקוד שלו קורא. כל שורה אומרת מה לבדוק הלאה: תעבורת רשת בזמן ריצה, קוד מקור, תהליך הסכמה, או traces של API בדפדפן.

אותה הפרדה חשובה גם כשקוראים את חלון ההתקנה של Chrome. ספירת הרשאות גולמית לא יכולה להראות תזמון, היקף במסגרת, scope של OAuth, את web_accessible_resources, או מפתח externally_connectable שהושמט. מנגד, הצהרה רחבה אינה הוכחה לאיסוף או להוצאה החוצה. הפלט השימושי של ביקורת מניפסט הוא תוכנית בדיקה עדיפותית בזמן ריצה: לזהות את משטח הנתונים, לציין את שער המשתמש, ואז לצפות אם הנתיב המוצהר אכן מופעל.
איך לקרוא את שלך
סקירה קשורה: מדריך לאוטומציה בדפדפן.
chrome://extensions→ Details מציג את גישת האתר שניתנה, ומאפשר להעביר אותה ל־on click עבור כל מה שלא צריך גישה קבועה. זה מצמצם את חצי גישת האתר במה שתואר למעלה. זה לא נוגע בהודעות נכנסות (externally_connectableמגיע אל ה־service worker בכל מקרה), או בהרשאות ברמת הדפדפן. חשיבות ההצהרהdebuggerשל Thunderbit רלוונטית כאן. תיעוד האבטחה של extensions ב‑Chromium עצמו אומר שממשק debugger "may in some cases also sidestep other typical restrictions, such as host permissions or file access", כך שהעברה של גישת אתר ל־"on click" לא מגבילה את מה שהוא יכול להגיע אליו. גם הבקרה הזו לא נוגעת ל־tabs,webNavigation,clipboardRead,downloads, או לכל מה שנמצא ב־optional_permissions.- עבור הקובץ הגולמי, החבילה נמצאת תחת התיקייה
Extensions/<id>/<version>/של Chrome. יש לקרוא שישה שדות:permissions,optional_permissions,host_permissions,content_scripts(ה־matches,run_atו־all_framesשבתוכם),externally_connectable— תוך זכירה שהיעדר מפתח הוא מצב פתוח עבור פונים של תוספים — ו־web_accessible_resources, שה־matchesשבו יכולים לציין סכמות שה־content scripts לעולם לא מציינים. בשדה האחרון של Thunderbit יש שתי רשומות<all_urls>שחושפות אתindex.htmlושני סקריפטים מצורפים לכל origin, עםuse_dynamic_url: false, מה שמאפשר לעמוד לבדוק האם כתובות ה־extension היציבות האלה נפתרות. - בדקו את תאריך העדכון האחרון של הרישום מול גרסת Chrome הנוכחית.
גילוי נאות ומשאבים: המאמר הזה פורסם על ידי Thunderbit, שהתוסף שלו כלול באותה טבלה ובאותו מנתח. pillar scraper בקוד פתוח שלנו מכסה כלים שאינם תוספי דפדפן.
נסו את Thunderbit לחילוץ נתוני אינטרנט
הגרסה הקצרה
עשרה תוספי scraping ואוטומציה, כולל שלנו, נקראו מתוך המניפסטים שלהם.
Agenty לא מצהיר על גישת אתר ולא על content scripts, ופועל רק על הלשונית שאתה רואה כשאתה לוחץ עליו, ב־2.2 MiB. Axiom.ai מצהיר על כל כתובת HTTP ו‑HTTPS על פני 37.1 MiB. Magical מצהיר על שלוש־עשרה הרשאות, כולל clipboardRead — והוא גם התוסף היחיד כאן שסוגר לחלוטין הודעות נכנסות. Table Capture מצהיר על ארבע הרשאות בלבד, ומזריק ב־document_start לכל המסגרות על <all_urls> — אותה תקרת התאמה שגם שלנו מגיע אליה, רק מוקדם יותר — ובנוסף userScripts לפי בקשה. TexAu הוא הקטן ביותר, והוא מציין את הכי הרבה יעדים — ארבעה־עשר דפוסים על פני שלוש־עשרה תכונות נפרדות. הוא לא היחיד שמציין יעדים: Clip to Clay מצהיר על שניים (clay.com ואתר צד שלישי אחד), ו‑Hexomatic ו‑Clay for Chrome מציינים את הדומיינים שלהם. TexAu הוא היחיד שרשימת היעדים שלו היא ברובה אתרים של אחרים. חמישה מתוך העשרה יכולים להגיע לקבצים במחשב שלך, ושניים מהם — Axiom.ai ושלנו — מבלי לכתוב אפילו file://.
Thunderbit, שלנו, יושב בקצה הרחב: <all_urls> גם לגישת host וגם להזרקה סטטית, ועוד debugger, שאף תוסף אחר בקבוצה הזו לא מצהיר עליו. הוא נמצא בברירת המחדל של Chrome שמאפשרת הודעות מכל תוסף, והוא מגיע ל־file:// אחרי שהשער של Chrome לגישת קבצים מופעל.
הצהרה היא תקרה, לא התנהגות, וכל זה לא מראה שימוש לרעה. אבל זה מפורסם, קל לבדיקה, והפער בין שני הקצוות גדול יותר מכל מה שמופיע בדפי המוצר.
נסו את Thunderbit לחילוץ נתוני אינטרנט Get Started Free
שאלות נפוצות
האם הרשאה רחבה אומרת שהתוסף עושה משהו לא תקין — ומדוע ספירת הרשאות לא מספיקה?
לא, כי ספירה מפספסת שני דברים. <all_urls> אומר שתוסף עשוי לקרוא כל עמוד שבו תבקר; הוא לא אומר מה הוא עושה או אם משהו בכלל יוצא מהמחשב שלך, וכלי שנועד לחלץ נתונים מכל עמוד באמת לא יכול לעבוד מרשימת דומיינים בשם. הממצא כאן הוא הפער, לא התנהגות לא תקינה — קביעת ההתנהגות בפועל דורשת ניתוח תעבורת רשת בזמן ריצה, וזה לא נעשה בביקורת הזו. לגבי הספירה: הגדרות הזרקה אינן הרשאות, ולכן Table Capture מצהיר על ארבע אבל מזריק ב־document_start, ל־all_frames, על פני <all_urls>. ו־optional_permissions לא מופיעות כלל בהודעת ההתקנה — Table Capture יכול לבקש userScripts בזמן ריצה, מה שמאפשר להריץ סקריפטים חופשיים של המשתמש בהקשרי עמוד, ו‑Magical יכול לבקש webRequest.
מי מבין אלה מבקש הכי מעט?
Agenty: ארבע הרשאות, בלי הרשאות host, בלי content scripts. הוא נשען על activeTab, שמעניקה גישה ללשונית הנוכחית רק אחרי שלוחצים על התוסף ורק עד שעוזבים את הדף. Hexomatic הוא הבא בתור, עם שתי הרשאות ו־content scripts שמוגבלים לדומיינים שלו.
איך תוסף יכול להגיע לקבצים המקומיים שלי בלי להצהיר על file://?
כי <all_urls> כולל את הסכמה file:. Listly, Magical ו‑Table Capture מציינים דפוסי file:// במפורש — Magical ב־content scripts ו‑Table Capture ב־web_accessible_resources. Axiom.ai ו‑Thunderbit מגיעים אליה דרך ה‑wildcard בלי להזכיר אותה בכלל. http://*/* ו־https://*/* לא מכסים את file://. Chrome משאיר את גישת הקבצים כבויה כברירת מחדל מאחורי מתג לכל תוסף, ולכן ההצהרה היא בקשה ולא הענקה.
מה זה externally_connectable, ולמה השמטתו היא האפשרות הפתוחה?
זהו המיפוי של מקורות web או מזהי תוספים שמורשים לשלוח הודעות ל־background script של התוסף. ברירת המחדל של Chrome כשהמפתח חסר היא שכל תוסף יכול להתחבר, ואף דף web לא יכול. שבעה מתוך עשרת התוספים משמיטים אותו, כולל Thunderbit. כשהמפתח קיים, Hexomatic פותח את ערוץ התוספים לשמונה מזהים בשם; Axiom.ai פותח שבעה web origins ומשאיר את ערוץ התוספים סגור; Magical מצהיר על רשימות ריקות לשניהם, ובכך סוגר את שני הערוצים.
מה מניפסט Thunderbit עצמו מצהיר?
<all_urls> לגישת host ולהזרקת content script סטטית, ב־all_frames ב־document_end; 15.9 MiB על פני 78 קבצים; ותשע מחרוזות במערך ההרשאות. שמונה מהן הן הרשאות מזוהות: activeTab, debugger, offscreen, scripting, sidePanel, storage, tabGroups ו־tabs. commands הוא מפתח manifest ברמה העליונה ואין לו השפעה במערך הזה. אף תוסף אחר בקבוצה הזו לא מצהיר על debugger. Thunderbit גם מגיע ל־file:// דרך <all_urls> אחרי שהשער של Chrome לגישת קבצים מופעל, והוא משמיט את externally_connectable. ההתנהגות בזמן ריצה לא הופעלה, ולכן הביקורת לא טוענת אילו מתודות CDP או scripting התוסף אכן מפעיל.


