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 のモバイルアプリ
- Jetpack プラグイン 使用時の WordPress.com サイト(連携に使用される)
- 投稿のピンバック・トラックバック受け付け: 他のサイトから投稿へのピンバック・トラックバックの受け付け。
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
へのリクエストを拒否する方法が使えます。
または
特定の 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 機能の有効・無効を切り替えるためのフックが用意されているのでこちらを利用する方法もあります。
ただし、この方法で無効化できるのは 認証を必要とする処理だけ であり、認証を必要としないピンバック・トラックバック受け付け機能は無効化できません。
参考: xmlrpc_enabled – Hook | Developer.WordPress.org
余談ですが、 Disable XML-RPC という有名なプラグインは上の add_filter()
の行だけを含む 1 ファイルの超シンプルな内容のプラグインです。
ピンバック・トラックバックの受け付けを設定で無効化する
XML-RPC 機能自体は管理画面から無効化できませんが、その中のピンバック・トラックバック受け付け機能は管理画面から無効化できます。
新規投稿のデフォルト設定
新規の投稿のデフォルト設定は「設定」→「ディスカッション」ページから行えます。 「新しい投稿に対し他のブログからの通知(ピンバック・トラックバック)を受け付ける」のチェックボックスのチェックを外して設定を保存してください。
既存の投稿の設定変更
既存の投稿については投稿設定の「ディスカッション」から行えます。 投稿の編集ページで投稿設定を開き「ディスカッション」をクリックして「ピンバックとトラックバックを許可」のチェックを外して設定を保存してください。
おまけ: 近年のXML-RPC 機能の位置付け
現在 WordPress には XML-RPC よりも高機能でセキュリティに優れた REST API が備わっており、主にそちらが利用されています。 新規の開発で WordPress のウェブ API 利用が必要な場合は REST API を使うことが一般的です。 XML-RPC が利用される機会はほとんどありません。