
مواقع Ghost CMS القديمة التي تم اختراقها عبر CVE-2026-26980 يمكن أن تعاني من حقن كود سبام في الصفحات. استخدم هذه الأداة للمسح الجماعي وتعديل حقول حقن الكود.
يزيل الشيفرة المحقونة من كل منشور وصفحة على موقع Ghost CMS عبر Admin API.
استخدم هذا لتنظيف موقع Ghost مخترق — على سبيل المثال، موقع تأثّر بثغرة حقن الشيفرة CVE-2026-26980 — عبر إزالة وسوم <script> التي يزوّدها المهاجم وغيرها من الترميز المحقون من حقلي حقن الشيفرة Header وFooter الخاصين بكل منشور وكل صفحة.
إنه آمن افتراضيًا (تشغيل تجريبي أولًا، ثم التطبيق) ومحدود النطاق بصرامة: فهو يمسح فقط هذين الحقلين الخاصين بكل منشور. لا يُمسّ حقن الشيفرة على مستوى الموقع بأكمله (Ghost Admin ← Settings ← Code injection)، ولا محتوى المنشورات، ولا أي إعدادات أخرى.
requirements.txt):pip install -r requirements.txt
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.
بمجرد أن ترضى عن مخرجات التشغيل التجريبي (dry-run)، شغّل الأمر مع --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 -r requirements.txt ثم حاول مرة أخرى.
admin_api_key must be in 'id:secret' format
تأكد من أن مفتاحك يحتوي على نقطتين رأسيتين في المنتصف. يجب أن يبدو كسلسلتين سادس عشريتين تفصلهما :. انسخه مباشرة من Ghost Admin دون إضافة مسافات.
ERROR: Ghost API returned HTTP 401
قد يكون مفتاح Admin API الخاص بك خاطئًا أو ربما تم حذف التكامل. ارجع إلى Ghost Admin → Settings → Integrations وتحقق من ذلك.
ConnectionError أو انتهاء المهلة
تحقق من أن ghost_url في إعداداتك صحيح وأن الموقع يمكن الوصول إليه من الجهاز الذي تشغّل عليه السكربت.
يتوقف السكربت عند موقع كبير كل صفحة من 50 منشورًا تولّد JWT جديدًا وتنتظر الـ API. هذا أمر طبيعي — امنحه دقيقة.