
पुरानी Ghost CMS वेबसाइटें जो CVE-2026-26980 के कारण समझौता (compromised) हो गई हैं, उनके पेजों में स्पैम कोड इंजेक्शन की समस्या उत्पन्न हो सकती है। इसका उपयोग कोड इंजेक्शन फ़ील्ड्स को थोक में साफ़ करने और संपादित करने के लिए करें।
Admin API के माध्यम से Ghost CMS वेबसाइट पर प्रत्येक पोस्ट और पेज से इंजेक्ट किया गया कोड हटाता है।
इसका उपयोग किसी समझौता किए गए Ghost साइट को साफ़ करने के लिए करें — उदाहरण के लिए, कोड इंजेक्शन भेद्यता CVE-2026-26980 से प्रभावित साइट — प्रत्येक पोस्ट और प्रत्येक पेज के Header और Footer कोड इंजेक्शन फ़ील्ड से हमलावर द्वारा दिए गए <script> टैग और अन्य इंजेक्ट किए गए मार्कअप को हटाकर।
यह डिफ़ॉल्ट रूप से सुरक्षित है (पहले dry-run, फिर लागू करें) और सख्ती से सीमित है: यह केवल उन दो प्रति-पोस्ट फ़ील्ड को साफ़ करता है। साइट-व्यापी कोड इंजेक्शन (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 | पोस्ट/पेज सेटिंग्स → Code injection → Header |
codeinjection_foot | पोस्ट/पेज सेटिंग्स → Code injection → Footer |
जिन पोस्ट और पेजों में कोई इंजेक्शन नहीं है, उन्हें चुपचाप छोड़ दिया जाता है।
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 की प्रतीक्षा की जाती है। यह सामान्य है — इसे एक मिनट दें।