WordPressの仕様の一つであるXML-RPC は、異なるシステム間での通信を標準化するために開発されました。つまり、WordPress外のアプリケーション(他のブログプラットフォームやデスクトップクライアントなど)がWordPressとやり取りできるためのものです。
この仕様は、誕生当初からWordPressの一部であり、非常に便利な役割を果たしてきました。これがなければ、WordPressはインターネットの他の要素から切り離され、孤独な運命を辿っていたかもしれません。
しかし、xmlrpc.phpには欠点があります。WordPressサイトに脆弱性をもたらす可能性があり、現在では、この役割はWordPress REST APIに取って代わられています。これにより、WordPressを他のアプリケーションと接続することができるようになりました。
今回の記事では、xmlrpc.phpとは何か、なぜ無効にする必要があるのか、そして、あなたのWordPressサイトでオンになっているかどうかを確認する方法もご紹介します。
準備はいいですか?早速始めましょう!
xmlrpc.phpとは?
XML-RPCは、WordPressと他のシステム間の通信を可能にする仕様です。トランスポートメカニズムとしてHTTPを、エンコードメカニズムとしてXMLを使用して、通信を標準化することによりこれが実現しています。
XML-RPCそのものは、WordPressよりも歴史があります。これは、2003年のWordPress作成の際に土台となったb2ブログソフトウェアに存在していました。このシステムを支えるコードは、サイトのルートディレクトリにあるxmlrpc.phpというファイルに保存されています。XML-RPCは廃れているものの、まだそこに残っています。
WordPressの初期のバージョンでは、XML-RPCはデフォルトで無効になっていました。しかし、バージョン3.5以降、デフォルトで有効になっています。これの主な理由は、WordPressモバイルアプリがWordPressサイトと通信できるようにするためです。
バージョン3.5より前のWordPressモバイルアプリでは、アプリからのコンテンツ投稿のために、サイトでXML-RPCを有効にする必要がありましたが…(経験者の方は)記憶にございますか?これは、アプリがWordPressを実行していないことが理由です。代わりに、xmlrpc.phpを使用してWordPressサイトとあくまでも通信を行なっていました。
ただし、XML-RPCが使用されたのはモバイルアプリだけではありません。WordPressと他のブログプラットフォーム間の通信を可能にするためにも使用され、トラックバックとピンバックを有効にし、セルフホスト型のWordPressをWordPress.comへリンクするJetpackプラグインの機能を支えました。
その後、REST APIがWordPressコアに統合され、xmlrpc.phpファイルはこの通信に使用されなくなりました。REST APIを使用して、WordPressモバイルアプリ、デスクトップクライアント、外部ブログプラットフォーム、WordPress.com(Jetpackプラグイン用)、そして他のシステムやサービスと通信を行なっています。REST APIが接続できるシステムの選択肢は、xmlrpc.phpに比べてはるかに豊富です。また、圧倒的な柔軟性があります。
このように、現在では、REST APIがXML-RPCに取って代わったため、サイトのxmlrpc.phpは無効にするのがいいでしょう。無効にすべき詳しい理由は以下の通りです。
xmlrpc.phpを無効にすべき理由
WordPressサイトでxmlrpc.phpを無効にする必要がある主な理由は、セキュリティの脆弱性が発生し、攻撃の対象になる可能性があるためです。
XML-RPCがWordPressの外部と通信する必要がなくなったため、XML-RPCを有効にしておく理由はどこにもありません。これを無効にして、サイトのセキュリティを強化するのが賢明です。
でも、xmlrpc.phpがセキュリティ上の問題となり、特に機能もしないのであれば、なぜWordPressから完全に削除されていないのでしょうか?
これは、WordPressの主要な機能の1つとして、常に下位互換性が挙げられるためです。サイトを適切に管理している人にとって、WordPress、プラグイン、テーマを最新の状態に保つのが重要であることはご存知の通りです。
しかし、WordPressのバージョンを更新したくない、または更新できないサイト所有者もいます。その人がREST API導入よりも前のバージョンを利用していたら、xmlrpc.phpへのアクセスが必要になる、ということです。
続いては、特定の脆弱性をさらに詳しく見てみましょう。
XML-RPCピングバックを利用したDDoS攻撃
xmlrpc.phpが可能にした機能の1つが、ピンバックとトラックバックです。これらにより、別のブログやサイトがコンテンツにリンクしたときに、サイトのコメント欄に通知を表示することができます。
この通信を支えたのがXML-RPCでしたが(既にご説明した通り)この役割はREST APIが担うようになりました。
サイトでXML-RPCが有効になっていると、ハッカーはxmlrpc.phpを悪用して短時間で膨大な数のピンバックをサイトに送信することにより、サイトにDDoS攻撃を仕掛けることができます。これにより、サーバーが過負荷になり、サイトが機能しなくなる危険が介在するのです。
XML-RPCを利用したブルートフォースアタック
xmlrpc.phpがリクエストを行うたびに、認証のためにユーザー名とパスワードを送信します。これは、重大なセキュリティ上の問題を引き起こします(REST APIにはありません)。実際、REST APIは、ユーザー名やパスワードではなく、認証用のトークンを送信するOAuthを使用します。
xmlrpc.phpはリクエストごとに認証情報を送信するため、ハッカーはこれを使用してサイトにアクセスしてしまう可能性があります。そして、ブルートフォース攻撃は、コンテンツの挿入、コードの削除、またはデータベースの損傷へとつながる危険性があります。
攻撃者がサイトに多数のリクエストを送信し、それぞれに異なるユーザー名とパスワードのペアを指定すると、最終的には正しい組み合わせになり…サイトにアクセスできてしまう、という具合です。
そのため、REST APIを使用して外部システムと通信するWordPressの最新バージョンを利用している場合は、xmlrpc.phpを無効にしておきましょう。この機能は不要であり、サイトを脆弱にする可能性だけがあります。
xmlrpc.phpが自分のWordPressサイトで有効になっているかどうか
最初に行うべきは、xmlrpc.phpが自分のWordPressサイトで有効になっているかどうかを確認することです。
これは、ファイルが存在するかどうかのチェックではありません。ファイルはWordPressに標準で存在し、XML-RPCが無効になっていてもファイル自体は残っています。
サイトでxmlrpc.phpが有効になっているかどうか確認するには、WordPress XML-RPC Validation Serviceを使用します。これによりxmlrpc.phpが有効になっているかどうかがチェックできます。

このサイトを使って確認した結果は次のとおりです。

このように、kinsta.comではxmlrpc.phpが無効になっていることがわかります。それでは、チェックを実行した結果、xmlrpc.phpがサイトで有効になっていることが発覚した場合、どのように無効化できるのでしょうか?
xmlrpc.phpを無効にする方法
xmlrpc.phpを無効にする方法は3つあります。
それぞれ個別に見てみましょう。
プラグインでxmlrpc.phpを無効にする方法
最も簡単な方法は、xmlrpc.phpを無効にするプラグインをインストールすることです。Disable XML-RPCプラグインで完全に無効にできます。使い方は次のとおりです。
ここでは、xmlrpc.phpが有効になっている状態の私のサイトを使ってみます。チェックにより、現在有効であることが確認できます。

WordPress管理画面のプラグイン画面からプラグインをインストールし、有効化します。
これだけです。他には何もする必要はありません。プラグインを有効化すると、XML-RPCが無効になります。そしてチェックをしてみると、無効であることがわかります。

これだけです。シンプルですね!
プラグインでXML-RPCピンバックを無効にする
xmlrpc.phpの特定の機能を無効にし、その他は残したままにするには、どうすればいいでしょうか。Disable XML-RPC Pingbackプラグインを使えば、ピンバック機能のみを無効にできます。つまり、必要に応じて、XML-RPCのその他の機能を引き続き利用できるようになります。
プラグインは、上述のDisable XML-RPCプラグインと同じように機能します。インストールして有効化するだけでOKです。
プラグインを使用してXML-RPCとREST APIを細かく制御する
サイトでのxmlrpc.phpとREST APIの設定をより詳細に制御したい場合は、REST XML-RPC Data Checkerプラグインが利用できます。
このプラグインをインストールして有効化したら「設定」> 「REST XML-RPC Data Checker」に移動し「XML-RPC」タブをクリックします。

これにより、xmlrpc.phpのどの機能をサイトで有効にするのかを正確に決めることができます。
または、単に完全にオフにすることもできます。また、 REST APIの制御も必要な場合は、このプラグインにあるそれ専用の別のタブを利用してください。
プラグインなしでxmlrpc.phpを無効にする方法
サイトにこのためのプラグインをインストールしたくない場合は、フィルターまたは.htaccessファイルにコードを追加して無効にできます。両方の方法を見てみましょう。
フィルターを使ってxmlrpc.phpを無効にする
この方法では、xmlrpc_enabledフィルターを使用してxmlrpc.phpを無効にします。この関数を使いプラグインを作成して、サイトで有効化します。
add_filter( 'xmlrpc_enabled', '__return_false' );
これをテーマ関数ファイルに追加することもできますが、別途プラグインを作成することをお勧めします。
もう1つのオプションとしては、cPanelまたはFTPを介してサイトのサーバーに接続することにより、Apacheを使用するホスティングプロバイダーの.htaccessファイルを編集できます。
.htaccessファイルを介してxmlrpc.phpを無効にする
.htaccessファイルに次のコードを追加します。
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
問題が発生した場合に備えて、事前に元のファイルのコピーを作成するようにしてください。
ホスティングプロバイダーにxmlrpc.phpを無効にしてもらう
または、攻撃が検出された場合、一部のホスティングプロバイダーはxmlrpc.phpを無効にしてくれます。
Kinstaでは、XML-RPCを介した攻撃が検出されると、以下のコードスニペットがNginx.configファイルに自動的に追加されます。
location ~* ^/xmlrpc.php$ {
return 403;
}
これにより403エラーが生成され、その攻撃を阻止することができます。
これを自分で行うには、上記の方法のいずれかを使用するのが最善です。ただし、その前に、必ず最初にお使いのホスティングプロバイダーに確認してください。
どんな時にxmlrpc.phpを有効にする必要があるのか
WordPressサイトでxmlrpc.phpを有効にする必要がある場合や、完全に無効にすべきでない場合もあります。
例えば、以下の通りです。
- REST APIは利用しておらず(推奨されませんが、状況によっては必要になることもあり)、WordPressサイトと他のシステムとの間で通信をする必要がある
- WordPressをバージョン4以降に更新できず、REST APIが使えない:これは、ホスティングセットアップの制限(この場合はホスティングプロバイダーを変更すべき)またはテーマやプラグインの非互換性(この場合は別のものに切り替えるか更新すべき)が原因である可能性があります。
- WP REST APIにはアクセスできず、XML-RPCにはアクセスできる外部アプリケーションを使用している(長期的には、そのアプリケーションを更新するか、REST APIと互換性のあるアプリケーションに切り替えることをお勧めします)
以上です!実際、上記のどれも、XML-RPCをオンにしたままにする特段いい理由だとは言えません。
これが依然としてWordPressにある唯一の理由は、下位互換性のためであり、古いシステムを使っている場合にのみ、使用可能性が生じます。サイトを最新の状態に保ち、最新のテクノロジーを使用したいなら、xmlrpc.phpは無効にするのがよいでしょう。
まとめ
XML-RPCは、WordPressが外部システムやアプリケーションと通信するための手段として、WordPressよりも前に開発されました。これには固有のセキュリティ面での欠陥があり、サイトが攻撃に対し脆弱になる可能性があります。
REST APIによってサイトが他のアプリケーションと通信できるようになったので、xmlrpc.phpは安全に無効にすることができます。上記の手順を実行すると、これを無効にすることでサイトのセキュリティを改善できます。
コメントを残す