WordPress XML-RPC は、異なるシステム間の通信を標準化することを目的とした仕様です。送信メカニズムとしてHTTPを使用し、エンコードメカニズムとしてXMLを使用しているため、多くのデータを送信できます。

WordPressの関係者である私たちにとって、最も重要なのは「異なるシステム」という部分です。WordPressは時々他のシステムと通信する必要があります。そして最近まで、XML-RPCはこの仕事に最適な候補者でした。BloggerやMovable Typeなどの他のブログシステムと通信を行う際に、またはデスクトップクライアントや公式のモバイルアプリから投稿する際に、XML-RPCは今までも対応してくれたし、今も対応してくれます。

先の文で過去形を使った理由は、もうすぐ新しいWP APIが登場することです。これは、RESTful APIであり、柔軟性やセキュリティなど全体的な改善をもたらすようです。ただし、WordPressは下位互換性を大切にしているため、XML-RPCは今後も長い間なくならないでしょう。したがって、XML-RPCについても理解する必要があります。

WordPress XML-RPCの歴史

WordPressがXML-RPCを使い始めたのは何時かご存知ですか?バージョン3.4でしょうか、2.1でしょうか、1.2でしょうか?引っ掛け問題です!答えは、WordPressのフォーク元のb2ブログソフトウェアの時代です。zipバージョンが268kbで、「b2」で始まるファイルとフォルダーの数が「wp」始まるファイルとフォルダーの数よりも多かった時代です。

システム全体の背後にあるロジックは、ルートディレクトリのxmlrpc.phpファイルにありました。中にwp_insert_post()wp_delete_post()などの関数がありました。

XML-RPCはデフォルトで無効になっていたため、有効にするには「設定」> 「書き込み」> 「リモート公開」に移動する必要がありました。バージョン3.5以降、本機能はデフォルトで有効になっています。

今日のXML-RPC

数々の変化を経験した上で、本ファイルのサイズは83 kbから3 kbに減少し、機能の大半はきちんとしたクラスに隠れています。このクラスはwp_xmlrpc_serverと呼ばれ、wp-includes/class-wp-xmlrpc-server.phpにあります。中には、48個のWordPress関数、7個のBlogger関数、6個のMetaWeblog関数、8個のMovableType関数と、4個のピンバック用関数あります。

前述のように、これらは十分に文書化されていないため、ファイルを開いて自分でクラスを確認するしかありません。XML-RPCを使用したコーディングに関するTuts+による記事は1つありますが、それ以外の資料はあまりありません。

将来のXML-RPC

新しいWP APIの登場により、XML-RPCの崩壊が予想されます。WordPress APIは既に利用可能ですが、実際に利用できるにはプラグインを有効にする必要がありますし、APIがまだテスト段階にあります。一方、それほど遠くない将来、WordPressコアコードの一環になるでしょう。その時点は、初めてXML-RPCのテリトリーを荒らす時点です。

現時点では、WordPress APIにはまだ欠けている機能がいくつかありますが、他の観点ではXML-RPCよりはるかにパワフルです。WP APIのウェブサイトでのこちらの優れた比較をご覧ください。

XML-RPCの課題

本APIの2つの最善の特徴は、拡張性とセキュリティです。XML-RPCは、認証を基本認証で行います。セキュリティ専門家のコミュニティでは絶対にやってはいけないことですが、要求ごとにユーザー名とパスワードを送信します。

一方、WordPress APIは、ユーザー名とパスワードを送信せずに認証にトークンを使用するため、はるかに安全なOauthを使用できます。

さらに、関数とメソッドを特定の実装にハードコーディングする必要はありません。 (すでに)独自のエンドポイントを追加して、好きなものを作成できます。投稿の追加、分類法やユーザーの管理などに制限されません。

XML-RPCも拡張可能ですが、プロセスは十分に文書化されておらず、APIほど強力ではありません。

JSONとXMLの比較でも、XML-RPCの方が負けてしまいます。APIはJSONを使用してデータを送受信します。これは、サーバー側とクライアント側の両方の言語で使いやすいため、開発者に好まれています。XMLは、適切な読み取りにPHPクラスが必要であるため、少し難しくなる場合があります。

最後に重要なことですが、XML-RPCはここ数年頻繁総当たり攻撃を受けるようになりました。これは、セキュリティの脆弱性の問題ではなく、WordPressへの別のパスの問題です。XML-RPCを使用して呼び出しをすると、ユーザー名とパスワードを入力する必要があり、その情報が有効であるかどうかをシステムが確認します。

XML-RPCの改善

XML-RPCをまったく使用しない場合、無効にした方が安全でしょう。ちょうどそのためのDisable XML-RPCという無料のプラグインがあります。(Kinstaのチームメンバーにより開発された)プレミアムプラグインであるPerfmattersでは、WordPressサイトの他の最適化と共にXML-RPCを無効にすることもできます。

perfmattersを使用してXML-RPCを無効にする

perfmattersを使用してXML-RPCを無効にする

または、次のコードをプラグインまたはテーマに追加して、コードでXML-RPCを無効にすることもできます。(ただし、これは間違いなくプラグインのテリトリーでしょう。)

add_filter( 'xmlrpc_enabled', '__return_false' );

防止できるもう1つの課題は、総当たりログインの試行です。これらのプラグインは、2~3回失敗するとログインをロックダウンします。All In One WP Security And Firewallは、精巧なプラグインですが、Login Lockdownなどのより具体的なツールも使用できます。私自身はプラグインのフットプリントを減らすために、より具体的なプラグインの方が好きです。

WordPressサイトでのXML-RPCのチェック

XML-RPCが現在あなたのウェブサイトで実行されているかどうか不明ですか? AutomatticチームのDanilo Ercoliは、XML-RPC Validatorという便利なツールを作成しました。このツールでWordPressサイトをチェックして、XML-RPCが有効になっているかどうかを確認できます。有効になっていない場合は、次の画像に示すようなKinstaのブログと同様なエラーメッセージが表示されます。

wordpress xmlrpcを確認する

WordPress XML-RPC攻撃を阻止する方法

Kinstaでは、XML-RPCを介した攻撃が検出されると、nginx構成ファイルに次のコードスニペットが追加され、攻撃を停止して403エラーを生成します。

location ~* ^/xmlrpc.php$ {
return 403;
}

まとめ

私の意見では、WordPress XML-RPCは当時素晴らしいシステムでしたが、WP APIに切り替える時が来ました。下位互換性のため、開発者はXML-RPCについてまだ知っており、使用できる必要がありますが、時間の経過とともにますます人気がなくなるでしょう。


この記事が面白いと思った方は、KinstaのWordPressホスティングプラットフォームも大好きでしょう。ウェブサイトをスピードアップし、当社のベテランのWordPressチームからの24時間365日のサポートを是非ご利用ください。Google Cloudを使用したインフラストラクチャは、自動スケーリング、パフォーマンス、およびセキュリティに重点を置いています。Kinstaの魅力をご案内させてください。当社のプランをご確認ください。