小さなプラグインを作り、WordPressのXML-RPCを停止する方法

小さなプラグインを作り、WordPressのXML-RPCを停止する方法

福田拓朗

この記事では、WordPressのXML-RPCを停止する方法を小さなプラグインを作るやり方で紹介していきます。

前書き

なぜXML-RPCを停止するべきなのかの理由についてはこの記事では割愛しています。詳しい理由をご覧になりたい方は、WordPress の脆弱性とその対応をご覧ください。

XML-RPCを停止する方法としては大きく分けて3つあります。.htaccessなどで遮断する方法。サイトのテーマのfunctions.phpに停止するコードを書き込む方法。そして、プラグインを作り、そこに停止するコードを書き込む方法です。

自作以外のテーマを使っている場合、アップデートでfunctions.phpが上書きされてしまうリスクがあります。そのため、子テーマというものを作る必要があります。

しかし、停止するコードだけなら、ほかのテーマでも使いまわせるものですし、プラグインを作るほうを私はおすすめします。

XML-RPCを止めるプラグインの構造を作る

まずは、フォルダやファイルを作って外側を作っていきます。

フォルダ名はmycustom-example-noxmlrpcとして作ります。そして、ファイルはWordPressのプラグインのテンプレートを参考に、index.phpmycustom-example-noxmlrpc.phpの2つを作ります。なお、index.phpのほうには動作するコードを書きません(<?phpとのみ記載します)。そして、mycustom-example-noxmlrpc.phpのほうには以下のコードを記入します。

<?php
/*
Plugin Name: mycustom example noxmlrpc 
*/
add_filter('xmlrpc_enabled', '__return_false');

これだけでXML-RPCを無効化できます。add_filterxmlrpc_enabled、それと__return_falsePlugin Nameが何をしているかが気になる方はそれぞれリンク先の開発者リソースをご覧ください(英語)。

なお、実際に公式プラグインディレクトリに登録する際は、プラグインの名前が公式のものと被らないようにするなど、注意が必要な点がいくつかあります。詳細は、こちらをクリックして確認できます(英語)。

ここまでで、ファイル構造はこうなります:

/mycustom-example-noxmlrpc
     index.php
     mycustom-example-noxmlrpc.php

プラグインをインストールする

プラグインをインストールするために、上で作ったプラグインのフォルダをZIP圧縮してください。そのうえで、WordPressの管理画面からインストールします。

まず、/wp-admin/plugin-install.php?tab=uploadにアクセスします。すると、以下のような画面が表示されます。

XML-RPCを無効化するプラグインをインストールするための画面

そうしたら、「ファイルを選択」をクリックします。そして、作成したZIPファイルを選び「開く」等をクリックしてアップロードします。

うまくできていれば以下のような画面が出ます。

XML-RPCを無効化するプラグインのインストール完了画面

この画面が出たら、「プラグインを有効化」をクリックします。うまくいけば「プラグインを有効化しました。」と出て完了です。

XML-RPCが無効なことを確認をする

では、プラグインをインストールして有効化したところで実際に無効化されているのか確認しましょう。

下記のコマンドをシェルで実行してください。なお、URLは適宜置き換えてください。また、usernamepasswordはWordPressの管理画面にログインするためのパスワードを使います。

curl -X POST -H "Content-Type: application/xml" -d '<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>username</value></param>
<param><value>password</value></param>
</params>
</methodCall>' https://example.com/xmlrpc.php

きちんと無効化されていれば以下のような出力が返ってきます。(重要な部分を太文字にしています)

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>405</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>このサイト上では XML-RPC サービスが無効になっています。</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

うまく無効化できていない場合は下記のようなレスポンスが返ってきますので、再度確認してみてください。

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><struct>
  <member><name>isAdmin</name><value><boolean>1</boolean></value></member>
  <member><name>url</name><value><string>https://example.com/</string></value></member>
  <member><name>blogid</name><value><string>1</string></value></member>
  <member><name>blogName</name><value><string>ブログタイトル</string></value></member>
  <member><name>xmlrpc</name><value><string>https://example.com/xmlrpc.php</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>

まとめ

もちろん既存のプラグインディレクトリにあるプラグインを使っても問題ありません。ただ、XML-RPCを停止するだけであればプラグインを作るのも一つの選択肢です。皆さんもぜひ挑戦してみてください。

<< WordPress のログイン画面に制限をかける

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解