WordPressのxmlrpc.phpとは?無効化すべき理由

WordPressには、外部からサイトとやり取りできる機能が以前から搭載されています。そのために長年使用されてきたのが、xmlrpc.phpというファイルです。しかし近年では、このファイルは解決策ではなく問題の原因として扱われることが多くなっています。
この記事では、xmlrpc.phpとは何か、そしてなぜ作られたのかを解説します。加えて、このファイルが引き起こす代表的なセキュリティ問題と、それらを自分のWordPressサイトでどう対処するかについても取り上げます。
WordPressにおけるxmlrpc.phpとは
XML-RPCは、HTTPを通信手段として、XMLをデータのエンコード手段として使用し、WordPressと他のシステムとの間でデータをやり取りできる機能です。WordPressは完全に独立したシステムではなく、他のシステムと連携する必要がある場面もあるため、この機能が用いられてきました。
xmlrpc.phpによって実現されていた主な機能には、スマートフォンからのサイト接続、他サイトからのトラックバックやピンバックの実装、そしてJetpackプラグインに関連する一部の機能などがあります。
例えば、モバイル端末からWordPressサイトに投稿したい場合、xmlrpc.phpによって有効化されているリモートアクセス機能を使えばそれが可能でした。
xmlrpc.phpが作られた理由とその使用方法
XML-RPCの使用は、WordPressという名前になる前の初期の時代までさかのぼります。
インターネットが今ほど発達していなかった時代には、執筆や公開は今よりもずっと困難で手間のかかる作業であり、通信速度も非常に遅いものでした。当時の解決策として考えられたのが、コンテンツを事前に作成しておき、接続時にまとめてブログへ投稿できる「オフラインブログクライアント」の開発でした。この接続手段として使用されたのが、XML-RPCです。
XML-RPCは当初、デフォルトで無効化されており、WordPress2.6で初めてダッシュボードに有効・無効を切り替えるオプションが追加されました。
その後、WordPress3.5でモバイルアプリの登場とともに、XML-RPCはデフォルトで有効化されるようになり、ダッシュボードからの有効・無効の切り替えオプションも削除されました。
現在のXML-RPCの扱い
2015年、WordPressのコアに新しいREST APIが導入され、モバイルアプリや他のプラットフォームとの連携が可能になりました。これをきっかけに、多くの開発者がREST APIを使うようになり、事実上XML-RPCの役割は置き換えられました。
とはいえ、XML-RPCは現在もWordPressで有効な状態にあり、xmlrpc.phpファイルは依然としてコアソフトウェアのディレクトリ内に存在しています。
おすすめの関連記事
WordPress REST APIの詳細や、WordPress開発での活用方法についてさらに詳しく解説しています。
xmlrpc.phpを無効化すべき理由
XML-RPCの最大の問題は、セキュリティ上の懸念にあります。問題の本質はXML-RPCそのものではなく、このファイルが悪用されることで、サイトへのサイバー攻撃が可能になる点にあります。
1つ目のリスクは、ブルートフォース攻撃(総当たり攻撃)による不正ログインです。攻撃者はxmlrpc.phpを通じて、複数のユーザー名とパスワードの組み合わせを用いてログインを試みます。この手法では、1つのコマンドで何百通りものパスワードを一度に試すことが可能であり、通常のセキュリティツールではブルートフォース攻撃を検知・ブロックすることが難しくなります。
2つ目のリスクは、DDoS攻撃によるサイトの停止です。ハッカーはWordPressのピンバック(pingback)機能を利用して、一度に数千のWebサイトにピンバックを送信します。xmlrpc.phpにはこの機能が含まれており、これにより攻撃者は無数のIPアドレスを使った分散型攻撃を仕掛けることができます。
ポイント
Webサイトにはさまざまな脅威が存在し、セキュリティリスクを常に抱えています。こうした脆弱性への対策として効果的なのが、信頼性の高いWordPress向けホスティングプロバイダーを選ぶことです。高度なセキュリティ対策を実装している
安全なWordPress向けホスティングサービスを選ぶことで、サイトをしっかりと保護することができます。
そのため、強力なパスワードの設定やWordPress向けセキュリティプラグインによる保護に加えて、xmlrpc.phpを無効化するのが最善の対策と言えます。
自分のサイトでXML-RPCが有効になっているかどうかを確認するには、「XML-RPC Validator」というツールを使ってチェックしてみましょう。エラーメッセージが表示される場合は、XML-RPCが無効になっている状態です。
一方で、成功メッセージが表示された場合は、xmlrpc.phpを無効化することを強くおすすめします。
WordPressでxmlrpc.phpを無効化する方法
それでは、WordPressでxmlrpc.phpを無効化する2つの方法を見ていきましょう。
1. プラグインでxmlrpc.phpを無効化する
プラグインを使えば、WordPressサイトでXML-RPCを無効化するのは非常に簡単です。
WordPressのダッシュボードから「プラグイン」→「新規追加」に移動し、「Disable XML-RPC-API」と検索してインストールします。プラグインを有効化すると、必要なコードが自動的に適用され、XML-RPCが無効化されます。
ただし、既存のプラグインの中にはXML-RPCの一部を利用しているものもあるため、完全に無効化するとプラグインの衝突が起きたり、サイトの一部機能が正常に動作しなくなる可能性がある点には注意が必要です。
2. 手動でxmlrpc.phpを無効化する
xmlrpc.phpをプラグインではなく手動で削除したい場合は、以下の方法でWordPressに届く前のxmlrpc.phpへのリクエストをすべて遮断できます。
まず、ホスティングのコントロールパネルにあるファイルマネージャーやFTPクライアントを使って .htaccessファイルにアクセスします。
このファイルは隠しファイルになっていることがあるため、「隠しファイルを表示」オプションを有効にする必要があるかもしれません。
.htaccessファイル内に、次のコードを貼り付けてください:
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>
重要!xxx.xxx.xxx.xxx は、xmlrpc.phpへのアクセスを許可したいIPアドレスに変更してください。アクセスを許可するIPがない場合は、この行をまるごと削除して構いません。

まとめ
XML-RPCは、WordPressサイトにおけるリモート投稿の手段としては優れたツールでした。しかし、セキュリティ上の脆弱性を抱えており、それが原因で被害を受けたサイト管理者も少なくありません。
サイトの安全性を保つためにも、プラグインを使うか .htaccessファイルを手動で編集して、xmlrpc.phpを完全に無効化することを強くおすすめします。