
Veraltete Ghost CMS-Websites, die durch CVE-2026-26980 kompromittiert wurden, können unter Spam-Code-Injection auf Seiten leiden. Verwenden Sie dies, um Code-Injection-Felder massenhaft zu löschen und zu bearbeiten.
Entfernt injizierten Code aus jedem Beitrag und jeder Seite einer Ghost-CMS-Website über die Admin-API.
Verwenden Sie dies, um eine kompromittierte Ghost-Site zu bereinigen – zum Beispiel eine, die von der Code-Injection-Schwachstelle CVE-2026-26980 betroffen ist –, indem Sie vom Angreifer eingefügte <script>-Tags und anderes injiziertes Markup aus den Code-Injection-Feldern Header und Footer pro Beitrag und pro Seite entfernen.
Es ist standardmäßig sicher (zuerst Dry-Run, dann Anwenden) und strikt begrenzt: Es werden nur diese beiden Felder pro Beitrag geleert. Websiteweite Code-Injection (Ghost Admin → Settings → Code injection), Beitragsinhalte und alle anderen Einstellungen werden niemals berührt.
requirements.txt):pip install -r requirements.txt
6478abc123def456:8f9e0d1c2b3a4567890abcdef1234567890abcdef1234567890abcdef12345678
Erstellen Sie eine Datei namens ghost_cleaner_config.json im selben Verzeichnis wie das Skript:
{
"ghost_url": "https://yourdomain.com",
"admin_api_key": "YOUR_KEY_ID:YOUR_KEY_SECRET"
}
Wenn Sie diesen Schritt überspringen, erstellt das Skript bei der ersten Ausführung eine Beispiel-Konfigurationsdatei für Sie und beendet sich – füllen Sie sie einfach aus und führen Sie es erneut aus.
Führen Sie dies immer zuerst aus, um genau zu sehen, was gelöscht würde, bevor irgendetwas verändert wird:
python3 ghost_injection_cleaner.py
Beispielausgabe:
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.
Wenn Sie mit der Dry-Run-Ausgabe zufrieden sind, führen Sie den Befehl mit --apply aus. Sie werden aufgefordert, dies zu bestätigen:
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
Für jeden Beitrag und jede Seite setzt es beide folgenden Felder auf null:
| Feld | Position im Ghost-Editor |
|---|---|
codeinjection_head | Beitrags-/Seiteneinstellungen → Code-Injection → Header |
codeinjection_foot | Beitrags-/Seiteneinstellungen → Code-Injection → Footer |
Beiträge und Seiten ohne Injection werden stillschweigend übersprungen.
Missing dependencies
Führe pip install -r requirements.txt aus und versuche es erneut.
admin_api_key must be in 'id:secret' format
Stelle sicher, dass dein Schlüssel in der Mitte einen Doppelpunkt enthält. Er sollte wie zwei Hex-Strings aussehen, die durch : getrennt sind. Kopiere ihn direkt aus Ghost Admin, ohne Leerzeichen hinzuzufügen.
ERROR: Ghost API returned HTTP 401
Dein Admin-API-Schlüssel ist möglicherweise falsch oder die Integration wurde gelöscht. Gehe zurück zu Ghost Admin → Einstellungen → Integrationen und überprüfe dies.
ConnectionError oder Timeout
Prüfe, ob ghost_url in deiner Konfiguration korrekt ist und die Website von dem Rechner aus erreichbar ist, auf dem du das Skript ausführst.
Das Skript hängt bei einer großen Website Jede Seite mit 50 Beiträgen erzeugt ein neues JWT und wartet auf die API. Das ist normal — gib ihm eine Minute.