
Admin API を介して、Ghost CMS ウェブサイト上のすべての投稿とページから注入されたコードを削除します。
これは、侵害された Ghost サイトをクリーンアップするために使用します。たとえば、コードインジェクション脆弱性 CVE-2026-26980 の影響を受けたサイトから、攻撃者が仕込んだ <script> タグやその他の注入マークアップを、投稿ごとおよびページごとの Header と Footer のコードインジェクションフィールドから除去する場合に使用します。
これはデフォルトで安全(まずドライラン、その後適用)であり、厳密にスコープが限定されています。クリアするのは投稿ごとのこれら2つのフィールドのみです。サイト全体のコードインジェクション(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.
ドライランの出力に問題がなければ、--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
キーの中央にコロンがあることを確認してください。2つの16進文字列を : で区切った形式になっているはずです。スペースを追加せずに Ghost Admin から直接コピーしてください。
ERROR: Ghost API returned HTTP 401
Admin API キーが間違っているか、インテグレーションが削除された可能性があります。Ghost Admin → 設定 → インテグレーションに戻って確認してください。
ConnectionError またはタイムアウト
設定内の ghost_url が正しいこと、およびスクリプトを実行しているマシンからサイトに到達できることを確認してください。
大規模なサイトでスクリプトが停止する 50件の投稿からなる各ページで、新しい JWT が生成され、API の応答を待ちます。これは正常な動作です — 少し時間を置いてください。