
مواقع Ghost CMS القديمة التي تم اختراقها عبر CVE-2026-26980 يمكن أن تعاني من حقن كود سبام في الصفحات. استخدم هذه الأداة للمسح الجماعي وتعديل حقول حقن الكود.
يزيل جميع حقن الكود على مستوى كل منشور وكل صفحة من موقع Ghost CMS عبر Admin API.
لا يتم المساس أبدًا بحقن الكود على مستوى الموقع (Ghost Admin → الإعدادات → حقن الكود).
pip install requests PyJWT
6478abc123def456:8f9e0d1c2b3a4567890abcdef1234567890abcdef1234567890abcdef12345678
أنشئ ملفًا باسم ghost_cleaner_config.json في نفس الدليل الذي يوجد به السكربت:
{
"ghost_url": "https://yourdomain.com",
"admin_api_key": "YOUR_KEY_ID:YOUR_KEY_SECRET"
}
إذا تجاوزت هذه الخطوة، فسينشئ السكربت ملف إعدادات مثالًا لك عند أول تشغيل ثم يخرج — فقط املأه وأعد التشغيل.
شغّل هذه الخطوة أولًا دائمًا لترى بالضبط ما الذي سيتم مسحه قبل لمس أي شيء:
python3 ghost_injection_cleaner.py
مثال على المخرجات:
Ghost Injection Remover
Mode : DRY-RUN (read-only)
Target: https://yourdomain.com
NOTE: /ghost/api/admin/settings/ (site-wide injection) is
never read or written by this script.
============================================================
POSTS
============================================================
47 posts fetched.
✦ 'My First Post'
HEAD: '<script>(function(){var _x="...obfuscated..."</script>'
🔍 DRY-RUN — would be cleared.
============================================================
PAGES
============================================================
6 pages fetched.
============================================================
SUMMARY
============================================================
Would clear : 1 posts/pages
Already clean: 52 posts/pages
Re-run with --apply to commit these changes.
عندما ترضى عن مخرجات التشغيل التجريبي، شغّل مع --apply. سيُطلب منك التأكيد:
python3 ghost_injection_cleaner.py --apply
Type YES to confirm changes to posts and pages: YES
...
✅ Cleared.
python3 ghost_injection_cleaner.py --config /path/to/my_config.json
لكل منشور وصفحة، يعيّن هذين الحقلين إلى null:
| الحقل | الموقع في محرر Ghost |
|---|---|
codeinjection_head | إعدادات المنشور/الصفحة → حقن الكود → الترويسة |
codeinjection_foot | إعدادات المنشور/الصفحة → حقن الكود → التذييل |
يتم تخطي المنشورات والصفحات التي لا تحتوي على أي حقن بصمت.
Missing dependencies
شغّل pip install requests PyJWT وحاول مرة أخرى.
admin_api_key must be in 'id:secret' format
تأكد من وجود نقطتين في منتصف مفتاحك. يجب أن يبدو كسلسلتين سداسيتين عشريتين مفصولتين بـ :. انسخه مباشرة من Ghost Admin دون إضافة مسافات.
401 Unauthorized
قد يكون مفتاح Admin API خاطئًا أو ربما تم حذف التكامل. ارجع إلى Ghost Admin → الإعدادات → التكاملات وتحقق.
ConnectionError or timeout
تحقق من أن ghost_url في إعداداتك صحيح وأن الموقع يمكن الوصول إليه من الجهاز الذي تشغّل عليه السكربت.
يتجمّد السكربت مع المواقع الكبيرة كل صفحة تحتوي على 50 منشورًا تنشئ JWT جديدًا وتنتظر استجابة API. هذا أمر طبيعي — امنحه دقيقة.