كل إضافة في Chrome تأتي مع ملف manifest.json يحدد جزءًا كبيرًا من سقف قدراتها على مستوى المتصفح: واجهات برمجة التطبيقات المطلوبة، وأنماط المضيفين، والبرامج النصية الثابتة داخل الصفحات، والصلاحيات الاختيارية، والاتصالات الخارجية المسموح بها. هذا ملف عام داخل الحزمة التي تثبّتها. لكنه لا يثبت أي القدرات المعلنة يستخدمها الكود أثناء التشغيل، ولا ما الذي يغادر الجهاز، ولا أي وصول إلى الحساب يتم عبر تسجيل دخول ويب منفصل.
راجعتُ عشر إضافات مخصصة للاستخراج الآلي وأتمتة المتصفح تم اختيارها لهذه المراجعة، بما فيها Thunderbit لأنها إضافتنا. الفروق هنا كبيرة جدًا. إحدى الإضافات لا تعلن أي وصول دائم إلى المواقع. وأخرى تعلن ثلاث عشرة صلاحية، بينها clipboardRead. أما Thunderbit فهو الإضافة الوحيدة في هذه المجموعة التي تعلن debugger، وهي قدرة واسعة للاتصال عبر CDP تختلف في طبيعتها عن الوصول إلى الصفحات أو OAuth أو البرامج النصية التي يضيفها المستخدم.
هذا ليس اتهامًا. فالصلاحية الواسعة كثيرًا ما تكون الطريقة الصادقة الوحيدة لبناء ميزة معينة، كما أن الصلاحية الضيقة قد تعني ببساطة أن المنتج يفعل أشياء أقل. الفكرة هنا أن الفارق ضخم، وهو معلن، لكنه لا يظهر أبدًا في جداول المقارنة.
كيف أُنجز هذا
تم تنزيل كل إضافة بصيغة .crx من نقطة التحديث الخاصة بجوجل نفسها — وهو نفس الرابط الذي يستخدمه Chrome — ثم تم فك الحزمة وتحليلها. لم يتم تثبيت أي إضافة ولم يتم تشغيل أي كود من كود الإضافات. هذه مراجعة لملف JSON.
تمت المزامنة في التنزيلات بمعدل طلب تقريبًا كل ثانيتين. وتم الاحتفاظ بكل ملف .crx وبالـ SHA-256 الخاص به وبملف manifest.json المستخرج كمواد توثيقية. Thunderbit مرّ عبر نفس السكربت المستخدم مع الإضافات التسع الأخرى، وليس عبر مسار خاص، لذا فالصف الخاص به مستخرج بالطريقة نفسها تمامًا.
يعتمد التحليل على فئتين من الأدلة مع الفصل بينهما:
- السلوك الثابت المعلن: أنماط المضيفين وإدخالات
content_scripts، بما في ذلكmatchesوrun_atوall_frames. - القدرة المتاحة لكود وقت التشغيل: واجهات API المذكورة في
permissionsأوoptional_permissions. هذه التصريحات توضّح ما يمكن للكود طلبه أو استدعاؤه، لا ما إذا كان يفعل ذلك فعلًا.
لا توجد درجة رقمية من نوع "الأقوى". فـ debugger وuserScripts والوصول الواسع للمضيفين ونطاقات OAuth والوصول إلى الحافظة والرسائل الخارجية كلها تكشف أنواعًا مختلفة من البيانات وتتطلب شروطًا مختلفة. ومقارنتها تحتاج إلى نموذج تهديد لا توفره هذه المراجعة القائمة على البيان وحده.
الأحجام أدناه هي إجمالي الحجم بعد الفك بوحدة MiB (2²⁰ بايت)، محسوبة من إدخالات 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 | نطاقان مسميان | — |
| TexAu v2 | 1.6.6 | 0.3 MiB | 12 | 6 | 14 نطاقًا مسميًا | — |
كان هناك اثنتان إضافيتان في قائمة المرشحين وليستا في الجدول، لأسباب تستحق الإشارة إليها بحد ذاتها.
الفارق هنا خيار تصميم، لا مجرد أثر للحجم
Agenty لا تعلن أي صلاحيات مضيف ولا تشحن أي 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)، بلا صلاحيات مضيف، وبرامج نصية ثابتة مقتصرة على نطاقين خاصين به.
أما Clay for Chrome فهو شكل ثالث يستحق الفصل: يعلن *://*/* كسماحية مضيف، لكنه يحقن content scripts فقط على نطاقه الخاص. إذن القدرة الدائمة واسعة، بينما السلوك التلقائي ضيق. جدول الصلاحيات وحده يخلط بين الأمرين.
خمسة من العشرة تستطيع الوصول إلى الملفات على جهازك
file:/// ليس موقعًا إلكترونيًا. بل هو نظام ملفاتك المحلي معروض داخل تبويب المتصفح — ملف PDF فتحته، أو تصدير HTML، أو فاتورة تم تنزيلها.
المرجع الرسمي: وثائق أنماط المطابقة في Chrome.
ثلاث إضافات تقول ذلك صراحةً. واثنتان تصلان إليه من دون ذكره: <all_urls> تشمل مخطط file:.
| الإضافة | كيف تصل إلى file:// | هل تذكر file:// في البيان؟ | أين |
|---|---|---|---|
| Magical | تطابق file:///* — أي ملف محلي يعرضه Chrome، وليس HTML فقط — في أربعة من ستة content scripts | ✅ | 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 permissions فقط. 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 يستطيع إتاحة API الخاص بـ userScripts بعد أن يفعّل المستخدم بوابة Chrome. هذه المراجعة لم تقس عدد المرات التي يزور فيها المستخدمون صفحة الإعدادات تلك أو يفعلون المفتاح.
لا userScripts ولا غيره مخفيان؛ كلاهما في البيان. وأي جدول يتجاهل القسم الاختياري يقلل من شأن منتجين.
توقيت الحقن، لا مجرد النطاق
كيف يتم حقن 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 يعملان عند أبكر نقطة حقن عبر أنماط مطابقة واسعة. Axiom.ai وClay for Chrome يستخدمان التوقيت نفسه ولكن على نطاقاتهما الخاصة فقط — نفس مستوى الجرأة، لكن الهدف ضيق.
بالنسبة للتصريحات الثابتة، فإن <all_urls> مع all_frames هو السقف الأوسع للمطابقة، وكل من Table Capture وThunderbit يقفان عنده. يختلف توقيت الحقن المعلن بينهما: Table Capture يستخدم document_start، بينما content script الثابت في Thunderbit يستخدم document_end. واجهات API في وقت التشغيل فئة قدرة منفصلة، ولا يمكن استنتاجها من هذا الجدول.
عدد الصلاحيات وحده إحصائية سيئة. Table Capture يعلن أربع صلاحيات فقط — أقل من معظم الموجودين هنا — ومع ذلك يحقن عند document_start في جميع الإطارات على <all_urls>، إضافة إلى userScripts عند الطلب.
من المسموح له بمراسلة الإضافة
externally_connectable يحدد أي الصفحات أو الإضافات الأخرى يمكنها إرسال رسائل مباشرة إلى الخلفية الخاصة بالإضافة. والافتراضي هنا غير بديهي.
حذف هذا المفتاح هو الإعداد الأكثر سماحية. الافتراضي في Chrome عندما يكون externally_connectable غائبًا هو أن أي إضافة يمكنها الاتصال، بينما لا يمكن لأي صفحة ويب ذلك. أما التصريح به فهو طريقة لتقييد الوصول.
وبناءً على ذلك تنقلب القراءة في الجدول:
| الإضافة | إعلان externally_connectable | من يمكنه مراسلتها |
|---|---|---|
| Agenty | غير مذكور | الافتراضي السماحي — أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب |
| Clay for Chrome | غير مذكور | الافتراضي السماحي — أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب |
| Clip to Clay | غير مذكور | الافتراضي السماحي — أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب |
| Listly | غير مذكور | الافتراضي السماحي — أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب |
| Table Capture | غير مذكور | الافتراضي السماحي — أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب |
| TexAu | غير مذكور | الافتراضي السماحي — أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب |
| Thunderbit (إضافتنا) | غير مذكور | الافتراضي السماحي — أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب |
| Hexomatic | ثمانية معرّفات إضافات وسِتة أصول ويب | يفتح القناتين من أساس مغلق |
| Axiom.ai | سبعة أصول ويب، بلا ids | قناة الإضافات مغلقة، وفتح سبع صفحات ويب |
| Magical | {"ids": [], "matches": []} | الإضافة الوحيدة هنا التي تغلق القناتين صراحةً |
قاعدة Chrome لها مستويان. من مرجع البيان:
| الحالة | من يمكنه الاتصال |
|---|---|
| المفتاح كله غير موجود | "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 غير مضبوط، وهذا يعني أنه لا يمكن لأي إضافة أن تراسله — قناة الإضافات مغلقة، وليست مفتوحة. ما فُتح فعليًا هو سبعة أصول ويب، واحد فقط منها تابع لـ Axiom: اثنان من أطراف ثالثة لا يمكن نسبتهما (*://*.tgwc.space/* و*://*.bitmachine.co.uk/*)، والباقي هو localhost و0.0.0.0 ومضيف Google APIs ومنصة اجتماعية كبيرة لا يديرها.
Hexomatic يفتح قناة الإضافات لثمانية معرّفات مسماة. ومع وجود المفتاح أصلًا، تصبح البداية صفر إضافات؛ وذكر ثمانية يوسّعها إلى ثمانية. أما matches الستة فتوّسع القناة الأخرى من لا شيء، واثنتان منها هما http://localhost:8000/* وhttp://localhost:3000/* عبر HTTP العادي — أي شيء يستجيب على هذين المنفذين على جهاز المستخدم يقع داخل قائمة السماح.
سبع من العشرة تحذف المفتاح بالكامل، بما في ذلك إضافتنا، وهي التي تبقى على الافتراضي السماحي في مراسلة إضافة إلى إضافة. إضـافتان تغلقان تلك القناة: Magical صراحةً عبر ids: []، وAxiom.ai لأنه يعلن المفتاح ولا يذكر ids. وMagical هو الوحيد الذي يغلق القناتين معًا.
وهذا السطر الأخير هو السبب في قراءة الملفات بدل عدّ الصلاحيات. فالإضافة نفسها قد تكون واسعة على محور، والأشد تقييدًا في المجموعة على محور آخر.
المحور الذي لا يعدّه أحد: نطاقات OAuth
قد يحمل البيان كتلة oauth2، والنطاقات الموجودة فيها تعني الوصول إلى حساباتك لدى شركات أخرى — وهو نوع مختلف من الوصول عن كل ما سبق، ولا يعكسه أي عدّ للصلاحيات.
المرجع الرسمي: قائمة نطاقات 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 فيتيح العرض والتعديل والإنشاء والحذف عبر كامل Google Drive الخاص بالمستخدم. وauth/spreadsheets يحمل الشكل نفسه لكل جدول بيانات يمكن للحساب الوصول إليه. كل من Axiom.ai وTable Capture يجمعان بين نطاق حساب Google ووصول الصفحة عبر <all_urls>.
هناك حدان لما يثبته هذا الجدول. النطاق مطلوب لا ممنوح — فـ Google تعرض شاشة موافقة ويمكن للمستخدم الرفض، كما قد لا يستدعي الإضافة واجهة الـ API أصلًا. كما أن البيان لا يرى OAuth الذي يتم عبر مسار identity الخاص بـ Chrome؛ فإضافة ترسلك إلى صفحة تسجيل دخول ويب بدلًا من ذلك قد لا تعلن شيئًا هنا. الأصفار السبعة تعني "لم يُطلب في هذا الملف"، لا "لا يوجد وصول إلى حسابك على Google" — بما في ذلك إضافتنا، ولهذا نورد هذا المحور على أنه معلومة لا ادعاء بالتقييد.
إضافتنا نحن، على نفس المقياس
Thunderbit 4.6.4 مرّ عبر نفس محلل الـ manifest المستخدم مع التسع الأخرى. الحزمة بحجم 15.9 MiB بعد الفك عبر 78 ملفًا.
السلوك الثابت المعلن: يظهر <all_urls> في host permissions وفي matches الخاصة بـ 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 الثابت، لكن قراءة البيان لا تستطيع إثبات ما إذا كان Thunderbit يستدعي طريقة CDP معينة أو يسجل سكربتًا في وقت أبكر محدد.
هذا الفرق يمنع عدة مقارنات مغرية لكنها غير صحيحة. غياب صلاحية أضيق مثل cookies لا يحد مما قد يصل إليه الكود الذي يملك debugger. وغياب clipboardRead لا يثبت استحالة الوصول إلى الحافظة. وبالعكس، وجود debugger ليس دليلًا على استخدام تلك المسارات. والإجابة على أي من هذه الأسئلة تتطلب فحص الشيفرة المصدرية أو تتبعًا وقت التشغيل، ولم يُجرَ أي منهما.
على هذا المقياس، Thunderbit واسع في الوصول الثابت إلى المواقع، ومتفرد في المجموعة من حيث إعلان debugger، ويقع على الافتراضي الخاص بـ Chrome في مراسلة الإضافة إلى الإضافة. لا يوجد ترتيب واحد بعنوان "الأقوى" لأن المراجعة لا توفر نموذج تهديد موحدًا عبر CDP وOAuth وuserScripts والحافظة والوصول إلى المضيفين.
التصميم المتحفظ الذي لا يروّج له أحد
TexAu حجمه 0.3 MiB — وهو الأصغر هنا بفارق الضعف — ويذكر أربعة عشر موقعًا محددًا بدلًا من استخدام wildcard: شبكات اجتماعية، ومنصة للمطورين، ومنصات نشر، ومنتج محادثة، ومزوّد بيانات أعمال، ونطاقه الخاص.
يمكنك قراءة هذا البيان ومعرفة بالضبط أين تكون الإضافة فعالة. وهو أيضًا إفصاح عن المنتج — فالقائمة المستهدفة تقول لك بوضوح ما الذي صُممت الأداة من أجله أكثر مما يفعل التسويق.
المقايضة حقيقية: القائمة المسماة لا تستطيع استخراج موقع غير موجود فيها، وكل هدف جديد يحتاج إصدارًا جديدًا. لكن "أربعة عشر نطاقًا مسمى" و"كل عنوان URL موجود" طرحان مختلفان جدًا، ولا يوضحهما إلا أحدهما.
منتجان لم يكونا كما قالت القائمة
إضافة Captain Data ليست موزعة علنًا. نقطة التحديث الخاصة بجوجل تعيد HTTP 204 مع جسم فارغ لمعرّف الإضافة الخاص بها — وهو ردّ لما لا يقدمه المتجر بشكل مجهول. أما صفحة القوائم الخاصة بها فتم تقديمها بشكل مجهول أيضًا — HTTP 200، بحجم 509,829 بايت. ما لم تستطع عملية الالتقاط إيجاده فيها كان سلسلة إصدار أو تاريخ آخر تحديث أو عدد تثبيتات؛ وتذكر ملاحظات السكربت نفسها أن القيمة null هنا دليل ضعيف، ولم يُلاحظ أي جدار تسجيل دخول. المعرّف حقيقي ومن الجهة الأولى، لذا فالتوزيع عبر رابط مباشر أو غير مُدرج هو التفسير الأرجح، لكنني لم أستطع تمييز ذلك عن الإزالة من القائمة ولن أخمّن.
Dataflow Kit لا يملك إضافة Chrome أصلًا. موقعه يصف تطبيق ويب مستضافًا مع اختيار بالنقر ونقطة نهاية 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 يطلق إصدارًا مستقرًا تقريبًا كل أربعة أسابيع، كما أن منصة الإضافات نفسها تتغير باستمرار تحتها. نقلت Chrome 138 بوابة userScripts إلى مكان آخر؛ والإضافة التي آخر إصدار لها في 2024 بُنيت وفق مجموعة قواعد مختلفة عن المتصفح الذي يطبقها الآن.
وهناك شيئان هذا الجدول ليسا عليه. أعداد التثبيتات مقسّمة إلى شرائح من Google — 1,000 / 3,000 / 7,000 / 10,000 / 100,000 / 200,000 — لذا فهي تقارن الرتب الكبرى فقط، وبعض المنتجات تعلن أرقامًا أكبر في تسويقها الخاص. والتاريخ الحديث حقيقة تتعلق بالشحن، لا حكمًا على جودة الصيانة أو خطر الصلاحيات.
ومن النتائج المفيدة: إصدار المتجر يطابق إصدار manifest في كل واحدة من الحزم العشر التي تم تحليلها. ملفات CRX التي فُككت هنا هي نفسها التي يعرضها المتجر اليوم، وليست نسخًا قديمة.
الحداثة تغيّر مقدار العمل اللاحق الذي يستحقه الاختيار؛ لكنها لا تغيّر دلالات البيان. قد تكون إضافة بقائمة نطاقات مسماة لم تُحدَّث منذ عام أقل تعريضًا لسطح الصفحات من إضافة تعتمد wildcard ونُشرت أمس. وقد يكون الإصدار الأحدث هو الخيار التشغيلي الأفضل إذا كان يتابع تغييرات Chrome بسرعة. وعند إعداد قائمة مختصرة، استخدم تاريخ المتجر لتحديد ما الذي يجب إعادة اختباره، ثم استخدم البيان لتحديد ما الذي يستدعي مراجعة أعمق للقدرات. لا تحوّل العمودين إلى درجة واحدة.
ما الذي لا يقوله لك البيان
الصلاحية المعلنة هي سقف وليست سلوكًا. <all_urls> تعني أن الإضافة قد تقرأ كل صفحة. لكنها لا تعني أنها تفعل ذلك، ولا أن شيئًا ما يغادر جهازك. إثبات ما يحدث فعليًا يتطلب مراقبة حركة الشبكة أثناء التشغيل — وهذا عمل مختلف، لم يُنجز هنا، ولا ينبغي قراءة أي شيء أعلاه كدليل على سوء استخدام.
مراجعة مرتبطة: تجربة اختبار إضافات Chrome.
وهناك ثلاث حدود إضافية:
- Chrome يفرض قيودًا على جزء كبير من هذا. الوصول إلى الملفات مغلق افتراضيًا؛ و
activeTabضيق عمدًا؛ والصلاحيات الاختيارية تحتاج إلى مطالبة وقت التشغيل؛ ويرى المستخدمون قائمة الصلاحيات عند التثبيت. - الصلاحيات الواسعة غالبًا ما تكون ضرورية. الأداة التي مهمتها "استخراج جدول من أي صفحة أنت عليها" لا يمكن أن تعمل من خلال قائمة مواقع مسماة فقط. النطاق الضيق أحيانًا هو انضباط، وأحيانًا مجرد منتج أصغر.
- نسخة واحدة، يوم واحد. كل الأرقام مأخوذة من الحزمة المعروضة في 2026-07-29.
تصحيحات جوهرية في التحليل
تعتمد الأعداد المنشورة على ثلاث قواعد يسهل الخطأ فيها عند كتابة محلل manifest سريع. أولًا، <all_urls> تشمل مخطط file:، لكن Chrome يبقي الوصول الفعلي إلى الملفات خلف مفتاح يتحكم به المستخدم. ثانيًا، يجب فحص web_accessible_resources.matches جنبًا إلى جنب مع content scripts وhost permissions؛ فهذا هو المكان الذي يذكر فيه Table Capture file://*/* صراحةً. ثالثًا، لـ externally_connectable افتراضات مختلفة بحسب ما إذا كان المفتاح كله غائبًا أو كان موجودًا مع حقل فرعي فارغ. الجداول أعلاه تطبّق هذه القواعد بشكل متسق.
كما أن إجمالي صلاحيات Thunderbit يميز بين السلاسل الخام والصلاحيات المعترف بها من Chrome. فمصفوفته تحتوي على تسع إدخالات، لكن commands تنتمي إلى المستوى الأعلى، لذا فالعدّ الفعّال المستخدم هنا هو ثماني صلاحيات معترف بها وسلسلة واحدة غير معترف بها. وأخيرًا، لا تعدّ تعريفات content_scripts الثابتة دليلًا على أن الكود يستدعي scripting.registerContentScripts أو طريقة CDP. هذه الاحتمالات تظهر فقط تحت قدرة وقت التشغيل، لا كسلوك تمت ملاحظته. سجلات الـ manifest الخام، وهاشات CRX، ومخرجات المحلل هي مسار التحقق لهذه التسويات، حتى لا يضطر القارئ إلى تصديق النص دون سند.
وعند اتخاذ قرار تثبيت فعلي، قارن أربعة أبعاد على الأقل بشكل منفصل: ما الصفحات الداخلة في النطاق افتراضيًا، وما الإجراء الصريح من المستخدم الذي يفتح المزيد من الوصول، وما واجهات المتصفح أو الحساب التي تصبح متاحة، ومن يمكنه إرسال رسائل إلى الإضافة من الخارج. نموذج Agenty القائم على activeTab، وuserScripts المحمية في Table Capture، ونطاق Drive في Axiom.ai، وتصريح debugger في Thunderbit ليست نقاطًا على خط واحد. إنها إجابات مختلفة لأسئلة تهديد مختلفة.
وهنا تطبيق لهذه المقارنة على أربعة تصميمات مختلفة عمدًا:
| الإضافة | نطاق الصفحات الظاهر في البيان | البوابة الإضافية | القدرة غير المرتبطة بالصفحات في هذه المراجعة | وضع المرسِل الخارجي |
|---|---|---|---|---|
| Agenty | لا صلاحية مضيف ولا content script ثابت | المستخدم يستدعي activeTab على اللسان الحالي | صلاحيات Chrome identity | المفتاح غير مذكور: أي إضافة يمكنها الاتصال، ولا صفحة ويب |
| Table Capture | سكربتات ثابتة على <all_urls> في جميع الإطارات عند document_start | الوصول إلى الملفات مغلق افتراضيًا؛ وuserScripts يحتاج إلى بوابة المستخدم المنفصلة في Chrome | userScripts وdownloads وidentity اختيارية | المفتاح غير مذكور: أي إضافة يمكنها الاتصال، ولا صفحة ويب |
| Axiom.ai | وصول wildcard على HTTP وHTTPS؛ سكربتات ثابتة عند document_start على نطاقاته الخاصة | موافقة OAuth على نطاقات Google المطلوبة | نطاقات Drive وSheets OAuth معلنة | قنوات الإضافات مغلقة؛ وفتح سبعة أصول ويب |
| Thunderbit | وصول <all_urls> إلى المضيفين وسكربتات ثابتة في جميع الإطارات عند document_end | الوصول إلى الملفات مغلق افتراضيًا؛ وإرفاق debugger له سلوك مرئي يتحكم فيه Chrome | debugger وscripting وtabs وواجهات متصفح ذات صلة معلنة | المفتاح غير مذكور: أي إضافة يمكنها الاتصال، ولا صفحة ويب |
هذا الجدول أيضًا لا ينتج فائزًا. فصفحة Agenty الضيقة لا تقول شيئًا عن كيف يتعامل خادمه الخلفي مع البيانات المرسلة. ونطاقات حسابات Axiom.ai ليست قابلة للمقارنة مع إضافة تقرأ الصفحة الحالية. وإعلان Table Capture عن userScripts يبقى خاملاً حتى يفعّل المستخدم بوابته المنفصلة. أما صلاحية debugger في Thunderbit فتكشف مساحة واسعة للتحكم بالمتصفح، لكن البيان لا يكشف أي نطاقات أو طرق CDP تستدعيها الشيفرة. وكل صف يخبرك بما ينبغي فحصه بعد ذلك: حركة الشبكة أثناء التشغيل، أو الشيفرة المصدرية، أو مسار الموافقة، أو تتبع واجهة المتصفح.

والفصل نفسه مهم عند قراءة نافذة تثبيت Chrome. فعدّ الصلاحيات الخام لا يبيّن التوقيت، ولا مدى الوصول إلى الإطارات، ولا نطاقات OAuth، ولا web_accessible_resources، ولا مفتاح externally_connectable المحذوف. وبالعكس، الإعلان الواسع ليس دليلًا على الجمع أو التسريب. والنتيجة المفيدة من مراجعة manifest هي خطة اختبار وقت تشغيل مرتبة حسب الأولوية: حدّد سطح البيانات، وسجّل بوابة المستخدم، ثم راقب ما إذا كان المسار المعلن يُستخدم فعلًا.
كيف تقرأ إضافتك أنت
مراجعة مرتبطة: دليل أتمتة المتصفح.
- في
chrome://extensions→ Details يمكنك رؤية الوصول الممنوح للمواقع، كما يتيح لك تحويله إلى on click لأي شيء لا يحتاج إلى وصول دائم. هذا يضيق نصف ما يتعلق بوصول المواقع مما سبق. لكنه لا يمس الرسائل الواردة (externally_connectableيصل إلى service worker بغض النظر)، ولا صلاحيات مستوى المتصفح. تصريح Thunderbit بـdebuggerمهم هنا. فتوثيق أمان إضافات Chromium نفسه يقول إن واجهة debugger API "قد تتجاوز في بعض الحالات قيودًا أخرى معتادة، مثل صلاحيات المضيف أو الوصول إلى الملفات"، لذا فإن ضبط وصول الموقع إلى "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وسكربتين مدمجتين لكل أصل، معuse_dynamic_url: false، ما يسمح للصفحة باختبار ما إذا كانت تلك الروابط الثابتة الخاصة بالإضافة تُحلّ أم لا. - قارن تاريخ آخر تحديث في القائمة مع إصدار Chrome الحالي.
الإفصاح والموارد: هذا المقال منشور بواسطة Thunderbit، وإضافتنا ضمن الجدول والمحلل نفسه. كما يغطي دليلنا المفتوح المصدر حول scrapers الأدوات غير المعتمدة على الإضافات.
جرّب Thunderbit لاستخراج بيانات الويب
الخلاصة السريعة
عشر إضافات للاستخراج والأتمتة، بما فيها إضافتنا، تمت مراجعة ما تعلنه في manifests الخاصة بها.
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> لكل من الوصول إلى المضيفين والحقن الثابت، إضافة إلى 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: أربع صلاحيات، بلا صلاحيات مضيف، بلا 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 أو معرّفات الإضافات المسموح لها بمراسلة الخلفية الخاصة بالإضافة. والافتراضي في Chrome عندما يكون المفتاح غائبًا هو أن أي إضافة يمكنها الاتصال، ولا يمكن لأي صفحة ويب ذلك. سبع من هذه العشر تحذفه، بما في ذلك Thunderbit. وعندما يكون المفتاح موجودًا، يفتح Hexomatic قناة الإضافات لثمانية معرّفات مسماة؛ ويفتح Axiom.ai سبعة أصول ويب مع إبقاء قناة الإضافات مغلقة؛ أما Magical فيعلن قوائم فارغة للقناتين، فيغلقهما معًا.
ماذا يعلن manifest الخاص بـ Thunderbit نفسه؟
<all_urls> للوصول إلى المضيفين والحقن الثابت للـ content scripts، في 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 يستدعيها الإضافة فعليًا.


