• WordPressのXML-RPCはリモート投稿とpingbackのメソッドを分けて止める

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へログインする処理を止めるコードではありません。外部の投稿ソフト、携帯端末のアプリケーション、連携サービスを利用している場合は、その接続が失敗します。

コードを入れる前に、管理者へ次の二点を確認します。

  1. WordPressの管理画面以外から投稿、固定ページ、コメントを操作しているか
  2. 制作会社や運用担当者が、外部ツールから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へ置くと、テーマを変更しただけで許可状態まで変わります。独立したプラグインへ保存し、何を止めたコードか、誰が解除を判断するかを記録します。

反映前後は、次の順で確認します。

  1. 現在使っている外部の投稿ソフトと連携サービスを一覧にする
  2. リモート投稿とpingbackのどちらを止めるか決める
  3. 検証できる環境へコードを入れる
  4. 止める操作が失敗し、残す操作が成功することを確かめる
  5. 管理画面からの投稿、コメント、更新作業に影響がないことを確かめる
  6. コードの保存場所、確認日、解除条件を運用記録へ残す

XML-RPCを止めても、管理画面のパスワード管理、WordPress本体とプラグインの更新、バックアップは必要です。一つの入口を閉じる処理を、サイト全体の安全対策と取り違えません。

まず、XML-RPCを使う外部ツールを一覧にしてください。使っていなければ認証付き操作を止め、pingbackも不要ならメソッドを別に外します。

戻る