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 で完全にブロックするのが最もシンプルで安全な対策です。