WordPressのXML-RPCはリモート投稿とpingbackのメソッドを分けて止める
公開日: 執筆:佐藤
WordPressのXML-RPCを無効にするなら、先に止めたい処理を分けます。外部の投稿ソフトから記事を更新する認証付きメソッドはxmlrpc_enabledで止めます。pingback.pingは認証処理を通らないため、xmlrpc_methodsから別に外します。
XML-RPCの入口が応答すること、リモート投稿を受け付けること、pingbackを受け付けることは同じではありません。「XML-RPCを無効」とだけ決めると、必要な連携まで止めたり、止めたつもりのメソッドを残したりします。
XML-RPCの入口と利用できるメソッドは別に考える
WordPress 3.5以降、XML-RPCは標準で有効です。WordPress Coreの変更記録では、管理画面の有効化項目を除き、認証処理へxmlrpc_enabledフィルターを追加しています。
一方、WordPress 3.7.1のXML-RPCサーバーは、利用できるメソッドを配列で持ち、xmlrpc_methodsフィルターを通してから要求を処理します。その配列には、投稿やコメントを扱う認証付きメソッドと、pingback.pingが含まれます。
| 止めたい処理 | 使うフィルター | 確認する影響 |
|---|---|---|
| 利用者名とパスワードを使うリモート操作 | xmlrpc_enabled |
外部の投稿ソフトや管理ツールが使えなくなる |
| pingbackの受信 | xmlrpc_methods |
pingback.pingを呼び出せなくなる |
| pingback情報の照会も含むメソッド群 | xmlrpc_methods |
pingback.extensions.getPingbacksも必要に応じて外す |
xmlrpc.phpというファイルの有無だけでは、どの処理が許可されているか判断できません。停止後は、対象にしたメソッドを使う操作で結果を確かめます。
リモート投稿はxmlrpc_enabledで止める
外部からの認証付きXML-RPC操作を使わないサイトでは、次のフィルターで認証処理を拒否できます。
add_filter( 'xmlrpc_enabled', '__return_false' );
このコードは、XML-RPCサーバーのlogin()を通る操作を止めます。ブラウザーからWordPressへログインする処理を止めるコードではありません。外部の投稿ソフト、携帯端末のアプリケーション、連携サービスを利用している場合は、その接続が失敗します。
コードを入れる前に、管理者へ次の二点を確認します。
- WordPressの管理画面以外から投稿、固定ページ、コメントを操作しているか
- 制作会社や運用担当者が、外部ツールからXML-RPCへ接続しているか
使っている連携が一つでもあれば、全面的に止める前に、その連携が必要な作業と代替手順を決めます。停止コードを入れることと、更新作業を引き継ぐことは別です。
pingback.pingはxmlrpc_methodsから外す
pingback.pingは、別のサイトからリンクされたことを通知するメソッドです。この処理は利用者名とパスワードによるlogin()を通りません。そのため、xmlrpc_enabledをfalseにしただけでは止まりません。
pingbackを受け付けない場合は、メソッド配列から対象を外します。
function satolab_remove_pingback_xmlrpc_methods( $methods ) {
unset( $methods['pingback.ping'] );
unset( $methods['pingback.extensions.getPingbacks'] );
return $methods;
}
add_filter(
'xmlrpc_methods',
'satolab_remove_pingback_xmlrpc_methods'
);
受信だけを止める目的なら、中心となるのはpingback.pingです。照会用のpingback.extensions.getPingbacksまで外すかは、利用中の連携を確認して決めます。
pingbackのメソッドを外しても、通常のコメント管理や、既存のコメントが消えるわけではありません。投稿ごとのディスカッション設定と、XML-RPCで受け付けるメソッドを分けて確認します。
停止コードはテーマから分離する
XML-RPCの許可は、サイトの運用方針です。テーマのfunctions.phpへ置くと、テーマを変更しただけで許可状態まで変わります。独立したプラグインへ保存し、何を止めたコードか、誰が解除を判断するかを記録します。
反映前後は、次の順で確認します。
- 現在使っている外部の投稿ソフトと連携サービスを一覧にする
- リモート投稿とpingbackのどちらを止めるか決める
- 検証できる環境へコードを入れる
- 止める操作が失敗し、残す操作が成功することを確かめる
- 管理画面からの投稿、コメント、更新作業に影響がないことを確かめる
- コードの保存場所、確認日、解除条件を運用記録へ残す
XML-RPCを止めても、管理画面のパスワード管理、WordPress本体とプラグインの更新、バックアップは必要です。一つの入口を閉じる処理を、サイト全体の安全対策と取り違えません。
まず、XML-RPCを使う外部ツールを一覧にしてください。使っていなければ認証付き操作を止め、pingbackも不要ならメソッドを別に外します。
関連記事

