コンテンツにスキップ

WordPress の XML-RPC 機能まとめ: 役割・脆弱性・無効化方法など

メインイメージ

WordPress の XML-RPC 機能についてまとめました。

確認時のバージョン

  • WordPress 6.6.1

XML-RPC とは?

XML-RPC とは eXtensible Markup Language - Remote Procedure Call の略で、異なるシステム間でデータをやりとりするためのプロトコル(通信のための決まり)のひとつです。

このプロトコルを使って通信を行うことで、リモートサーバー上で特定の処理を実行することができます。 やりとりに使われるデータ形式は(名前にあるとおり) XML です。

今日では REST API など後発のプロトコルが普及しているため、それ以前に使われていた XML-RPC は古い技術と見なされることが多いです。

WordPress における XML-RPC 機能

WordPress には本体に XML-RPC 機能が同梱されています。 現在は一般に XML-RPC は古い技術と見られることが多いですが、後方互換性を重視する WordPress では現在でもその機能が残っており利用されることがあります。

WordPress の XML-RPC 機能は WordPress インストールディレクトリ直下の xmlrpc.php ファイルが提供しています。

XML-RPC 機能は以下の用途などに利用されています。

  • 外部アプリによる WordPress の管理: 外部のアプリケーションを使った投稿やコメントの作成・編集・削除、メディアファイルのアップロードなど。外部のアプリケーションの例:
  • 投稿のピンバック・トラックバック受け付け: 他のサイトから投稿へのピンバック・トラックバックの受け付け。

WordPress 3.5 未満のバージョンではデフォルトで無効になっていたそうですが、 WordPress 3.5 ( 2012 年 12 月リリース)でデフォルトで有効化され、その後ずっとデフォルトでは有効なままです。 管理画面で無効にすることはできず、無効にするにはフックを書くかプラグインを利用するかなどして対応する必要があります。

WordPress における XML-RPC 機能のセキュリティ脆弱性

WordPress の XML-RPC 機能にはセキュリティ上の問題点があります。 そのため、 XML-RPC 機能はデフォルトで有効化されているものの原則(= XML-RPC を利用する外部アプリを使わないかぎり)無効化することが推奨されます。

XML-RPC 機能には具体的には以下のようなリスクがあります。

不正ログイン

不正ログインのためのブルートフォース攻撃の標的になります。 通常ログインフォームの場合は reCAPTCHA などのセキュリティ対策が行われるためある程度の防御が可能ですが、 XML-RPC の認証の場合は多くのパスワードを高速に試せるため、不正ログインのためのブルートフォース攻撃が効率よく行えてしまいます。

スパムコメント

コメント機能を有効にしている場合、 XML-RPC によるスパムコメント投稿の標的になります。

DoS 攻撃

ピンバック機能を悪用した DoS 攻撃の標的になります。 攻撃者が大量のピンバックリクエストを送りつけることで、比較的かんたんにサーバーに負荷をかけることができます。

他サイトへの DDoS 攻撃に利用

ピンバック機能を悪用して他サイトへの DDoS 攻撃に利用されるリスクがあります。 セキュリティ攻撃に加担してしまうことになります。

WordPress における XML-RPC 機能のセキュリティ対策

WordPress の XML-RPC 機能は無効化することが推奨されます。 無効化する方法はいくつかあります。一例をご紹介します。

.htaccess で XML-RPC エンドポイントへのリクエストを拒否する

ウェブサーバーに Apache を使っている場合は、設定ファイル .htaccess を使って xmlrpc.php へのリクエストを拒否する方法が使えます。

<Files "xmlrpc.php">
  Require all denied
</Files>

または

<Files "xmlrpc.php">
  Order deny,allow
  Deny from all
</Files>

特定の IP アドレスからのリクエストを例外的に許可したい場合は Deny from all の次の行に Allow from xxx.xxx.xxx.xxx という記述を追加してください。

この方法の場合 WordPress の XML-RPC 機能をすべて無効化できます。

セキュリティプラグインを使って XML-RPC 機能を無効化・制限する

XML-RPC 関連の機能を提供するセキュリティプラグインを利用することで XML-RPC 機能の悪用を防げます。

たとえば Security Optimizer という定番のプラグインは XML-RPC 関連のセキュリティ機能を提供しています。

フィルタフックで認証を必要とする XML-RPC 機能を無効化する

xmlrpc_enabled という、認証を必要とする XML-RPC 機能の有効・無効を切り替えるためのフックが用意されているのでこちらを利用する方法もあります。

add_filter( 'xmlrpc_enabled', '__return_false' );

ただし、この方法で無効化できるのは 認証を必要とする処理だけ であり、認証を必要としないピンバック・トラックバック受け付け機能は無効化できません。

参考: xmlrpc_enabled – Hook | Developer.WordPress.org

余談ですが、 Disable XML-RPC という有名なプラグインは上の add_filter() の行だけを含む 1 ファイルの超シンプルな内容のプラグインです。

Disable XML-RPC

ピンバック・トラックバックの受け付けを設定で無効化する

XML-RPC 機能自体は管理画面から無効化できませんが、その中のピンバック・トラックバック受け付け機能は管理画面から無効化できます。

新規投稿のデフォルト設定

新規の投稿のデフォルト設定は「設定」→「ディスカッション」ページから行えます。 「新しい投稿に対し他のブログからの通知(ピンバック・トラックバック)を受け付ける」のチェックボックスのチェックを外して設定を保存してください。

WordPress の XML-RPC の無効化: 新しい投稿に対し他のブログからの通知(ピンバック・トラックバック)を受け付ける

既存の投稿の設定変更

既存の投稿については投稿設定の「ディスカッション」から行えます。 投稿の編集ページで投稿設定を開き「ディスカッション」をクリックして「ピンバックとトラックバックを許可」のチェックを外して設定を保存してください。

WordPress の XML-RPC の無効化: ピンバックとトラックバックを許可

おまけ: 近年のXML-RPC 機能の位置付け

現在 WordPress には XML-RPC よりも高機能でセキュリティに優れた REST API が備わっており、主にそちらが利用されています。 新規の開発で WordPress のウェブ API 利用が必要な場合は REST API を使うことが一般的です。 XML-RPC が利用される機会はほとんどありません。

関連ページ