2026年5月20日

2026年5月20日

WordPressのXML-RPCを無効にする方法とセキュリティリスク

はじめに

xmlrpc.php はWordPressの旧来のリモートAPI機能ですが、現在ではDDoS攻撃やブルートフォース攻撃に悪用されることが多く、無効化を検討すべきファイルです。ただし、JetpackやWordPress公式アプリが利用しているため、完全に無効化すると影響が出る場合もあります。

XML-RPCのリスク

  • ブルートフォース攻撃: system.multicall を使うと1リクエストで何千ものパスワード試行が可能
  • DDoS増幅: xmlrpc.phpを経由して第三者サイトへの攻撃に利用される
  • コンテンツスパム: 認証を突破されると投稿・コメントを自動投稿される

無効化手順

方法1:.htaccessでブロック(Apache)

# .htaccess — xmlrpc.php へのアクセスを完全に遮断
<Files "xmlrpc.php">
    Order Deny,Allow
    Deny from all
</Files>

または、Rewriteルールで404を返す:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^xmlrpc\.php$ - [F,L]
</IfModule>

方法2:Nginxでブロック

# nginx.conf
location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
}

方法3:functions.phpで無効化

// functions.php — XML-RPCを無効化
add_filter('xmlrpc_enabled', '__return_false');

// XML-RPCのメソッドをすべて削除
add_filter('xmlrpc_methods', function($methods) {
    return [];
});

方法4:pingbackのみ無効化(Jetpack利用者向け)

JetpackはXML-RPCを使うため、完全無効化するとJetpack機能が停止します。pingbackだけを無効化する場合:

// pingbackのみ無効化(Jetpackは維持)
add_filter('xmlrpc_methods', function($methods) {
    unset($methods['pingback.ping']);
    unset($methods['pingback.extensions.getPingbacks']);
    return $methods;
});

// wp_head からpingback URLを削除
remove_action('wp_head', 'pingback_header');

実際に無効化されているか確認

# curl でXML-RPCのレスポンスを確認
curl -s https://example.com/xmlrpc.php
# "403 Forbidden" または "404 Not Found" になればOK
# "XML-RPC server accepts POST requests only." はまだ有効な状態

XML-RPCが必要なケース

| サービス | XML-RPC必要 | 代替手段 |

|---------|------------|---------|

| Jetpack | 必要 | なし |

| WordPress公式アプリ | 不要(REST API対応) | REST API |

| 旧モバイルアプリ | 必要 | アプリ更新 |

| WP-Cron | 不要 | 別の仕組み |

注意事項

  • Jetpackを使用中に xmlrpc_enabled → __return_false にするとJetpackが接続エラーになります
  • 完全無効化する前に、利用しているプラグインのXML-RPC依存を確認してください
  • 無効化後はWordPress公式アプリからの投稿機能は引き続き動作します(REST API使用)

まとめ

XML-RPCは現在のWordPressでは REST API が代替となるため、JetpackやWP公式アプリを使っていない場合は .htaccess で完全にブロックするのが最もシンプルで安全な対策です。

お気軽にご相談ください

お見積りへ お問い合わせへ