XML-RPCとは?詳細と扱う際の注意点

XML-RPCのイメージ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

WordPressなどのWebサービスで、管理画面にログインせずにリモートで操作するための仕組みが存在することをご存知でしょうか。
その仕組みとはXML-RPCです。

XML-RPCは、リモートで手続きを呼び出すための仕組みであり、その仕組みを利用することでリモート操作が可能となります。

今回は、XML-RPCの概要からWordPressでの利用方法や、利用の際の注意点を解説します。

XML-RPCとは

XML-RPCは遠隔手続き型呼び出し(RPC)プロトコルの一種です。
プロトコルは「通信時の約束事」であり、コンピュータ同士が正常に通信を行うためにプロトコルは必須となります。

XML-RPCは、XML形式のデータをHTTPでやり取りするためのプロトコルです。XML-RPCを利用するためには、XML-RPCサーバを立ち上げ、そのサーバに対してリクエストを送信します。

XML-RPCクラスの使い方について

XML-RPCはPHPなどのプログラミング言語を使ってWebサービスに組み込むことができます。

たとえば、PHPのフレームワークである「CodeIgniter」では、XML-RPCクラスを読み込み、XML-RPC Serverクラスを読み込むことで、XML-RPCが利用できるようになります。

XML-RPCサーバに対して、次の情報を含むリクエストを送信すると、XML-RPCサーバをリモートで操作可能です。

  • サーバのURL
  • 呼び出したいサーバ上のメソッド
  • リクエストデータ

XML-RPCでは利用できるデータ型が決まっています。その詳細については次の項目で確認しましょう。

XML-RPCのデータ型について

XML-RPCで利用できるデータ型は8種類です。

データ型 説明 使用例
integer 整数 <i4>30</i4>
double 倍精度浮動小数点数 <double>-33.84</double>
boolean 論理値(0/1) <boolean>0</boolean>
string 文字列 <string>xml-rpc string</string>
base64 Base64エンコードデータ <base64>
44GT44KM44GvQkFTRTY044Gu44K144Oz44OX44Or44Gn44GZ
</base64>
date/time 日時 <dateTime.iso8601>20200522T11:32:45</dateTime.iso8601>
array 配列 <array>
<data>
<value><string>str1</string></value>
<value><i4>54</i4></value>
<value><string>str2</string></value>
</data>
</array>
struct 連想配列 <struct>
<member>
<name>name1</name>
<value><string>hello</string</value>
</member>
<member>
<name>name2</name>
<value><string>world!</string></value>
</member>
</struct>

このようなデータ型を用いて、XML文書を作成してリクエストを送信します。
典型的なXML-RPCリクエストのXML文書の例としては、次のとおりです。

このようなリクエストを送信することで、リクエストを受け取ったXML-RPCサーバが処理を行います。

xmlrpc.phpについて

xmlrpc.phpは、WordPressを構成するPHPのプログラムコードです。

XML-RPCをコントロールするためのプログラムが記載されており、xmlrpc.phpを利用することで、次に挙げるような処理を他のプログラムやサイト外から行えます。

  • メールによる記事投稿
  • 既存記事の編集
  • 既存記事の削除
  • ファイルアップロード
  • コメントの編集
  • ピンバック

など

通常、上記の処理はWordPressの管理画面からログインしなければ行えません。

しかし、xmlrpc.phpを利用することで、管理画面からログインせずともリモートで操作が行えるのです。

WordPressのXML-RPC機能が悪用されることがある

WordPressを利用する上でも非常に便利なXML-RPC機能ですが、その反面セキュリティ的に弱い部分が存在します。

ここでは、xmlrpc.phpを利用した攻撃の概要と対策方法を見ていきましょう。

xmlrpc.phpへの攻撃概要

サイト外からのアクセスを許可するxmlrpc.phpファイルが悪用されると、次に挙げるような攻撃を受ける可能性があります。

  • DoS攻撃
  • ブルートフォース攻撃(総当たり攻撃)
  • サイトの改ざん

など

DoSはアクセス拒否攻撃と呼ばれるものであり、Webサイトに対して大量のリクエストを送信することでWebサイトにアクセスできなくしたり、最悪の場合にはWebサーバをダウンさせたりする攻撃のことです。

そのほかにも、ログインIDとパスワードの組み合わせを総当りで施行するブルートフォース攻撃や、管理者権限が盗まれることでWebサイトの改ざんが行われる可能性が存在します。

xmlrpc.phpを悪用したDos攻撃への対処方法

先に挙げた攻撃のなかでも、特にDoS攻撃は被害にあう可能性が高く、対応が必須です。xmlrpc.phpを利用しない場合は、機能を停止することが最も確実ですので、具体的な対策方法を解説します。

プラグインによる制限

xmlrpc.phpを対象とした攻撃が存在することは有名であり、多くのWordPressプラグインで対策が行えるようになっています。

対策できるプラグインの例としては、次のものが挙げられます。

など

手軽にxmlrpc.phpを無効化したい場合には、こちらのプラグインを利用するとよいでしょう。

.htaccessファイルを使った制限

プラグインを導入したくない場合は、.htaccessファイルを使った制限でも同様に対応できます。
.htaccessファイルは、WebサーバーソフトウェアとしてApacheを利用している場合に利用可能なアクセス制限を記載するファイルです。

もし、お使いのWebサーバーソフトウェアがApache以外である場合は、利用できませんのでご注意ください。

.htaccessでxmlrpc.phpへのアクセスを制限するためには、WordPressのインストールフォルダに次の内容の.htaccessを作成(既存の.htaccessファイルがある場合は追記)します。

このような.htaccessファイルを作成することで、xmlrpc.phpへのアクセスを全面的に制限することが可能です。

まとめ

XML-RPCはXML形式のデータをHTMLでやり取りするためのプロトコルです。XML-RPCを利用することで、Webサービスなどのリモート操作が可能となります。

WordPressを利用する場合には、xmlrpc.phpファイルに必要なプログラムが記載されており、こちらのファイルへのアクセスによってメールによる記事投稿などが行えます。

しかし、xmlrpc.phpはサイバー攻撃の標的になりやすく、DoS攻撃やサイト改ざんなどの被害にあう可能性も考えられるものです。

そのため、利用しない場合にはプラグインや.htaccessファイルを使って、アクセスを制限しましょう。

WordPressサイトの保守・運用・管理のご相談はこちら

WordPressサイトの制作・リニューアル等のご相談はこちら

WordPressサイトのハッキングからの復旧・不具合の解消はこちら

土井純也

土井 純也 Twitterアイコン Facebookアイコン

WordPressスペシャリスト・エンジニア
株式会社プレートテクノロジー 取締役
1985年北海道生まれ。200社以上のWordPressサイトの制作を担当し、「wp.support」では一部上場企業を含め、様々なサイトのWordPress保守・セキュリティをサポートしている。