WordPressのxmlrpc.phpとは|無効化の方法と止める前の確認点
直らないときは、無料でご相談いただけます(直らなければ料金はいただきません)。
結論:xmlrpc.php は、スマートフォンのアプリや外部のサービスから、WordPressに記事を投稿するなどのための入口です。パスワードの総当たり(ブルートフォースアタック)などに狙われやすいため、使っていなければ止めることが対策の一つになります。
ただし、Jetpack や、アプリ・外部のサービスからの投稿などで使っていることがあります。止める前に使っていないかを確かめ、止め方は、使い方に合わせてサーバー会社の機能・プラグイン・.htaccess から選びます。ファイルそのものは消しません。
目次
xmlrpc.php とは
XML-RPC は、WordPressの管理画面を開かずに、外から記事の投稿・編集や画像のアップロードなどをするための仕組みです。その入口が、WordPressを入れたフォルダにある xmlrpc.php です。ほかのブログからリンクされたことを知らせる「ピンバック」の受け付けも、ここで行っています。
今のWordPressの記事の編集画面(ブロックエディター)は、XML-RPC ではなく REST API という別の仕組みを使っています。管理画面での編集とは別に、Jetpack などの連携で使っていないかを確かめます(止める前に、使っていないかを確かめる)。
アクセスの記録やセキュリティのプラグインの通知に xmlrpc.php への接続が出ていても、それだけで入り込まれたとは限りません。気になる様子があるときは、下の注意をご覧ください。
なぜ狙われるのか
- パスワードの総当たり:XML-RPC にはユーザー名とパスワードを送って使う機能があるため、総当たりでログインを試される入口になります。WordPressの公式の案内でも、
xmlrpc.phpは総当たりによく狙われる所とされ、使っていなければ止める、使っているなら制限するよう勧めています。ログイン画面(wp-login.php)とは別の入口なので、ログインの守りの設定がこちらにも効いているかを確かめます。 - ほかのサイトへの攻撃の踏み台:ピンバックを受け付けると、WordPressは、知らせてきた相手のページを見に行きます。これを悪用して、ほかのサイトへ大量の通信を送らせることがあります。
- サイトが重くなる:ログインに失敗し続ける試しでも、届くたびにサーバーが処理するため、サイトが重くなることがあります(WordPressが遅いときの記事)。
なお、今のWordPressでは、1回の通信でたくさんのパスワードをまとめて試す方法(system.multicall)に対して、一度失敗した後の残りの試しを止める仕組みが入っています。それでも通信を何度も送られれば試され続けるため、使っていない入口を止めることが対策になります。
止める前に、使っていないかを確かめる
次のどれかに当てはまる場合は、XML-RPC を使っている可能性があります。止めると、その機能が動かなくなることがあります。
| 使っているもの | 確かめ方 |
|---|---|
| Jetpack | 「プラグイン」→「インストール済みプラグイン」に Jetpack があるか。Jetpack は、WordPress.com との接続に xmlrpc.php を使います |
| スマートフォンのアプリ・外部のサービスからの投稿 | 管理画面を開かずに、アプリや別のサービスから記事を投稿・更新していないか |
| パソコンの記事作成ソフト | ブラウザではなく、パソコンのソフトで記事を書いて投稿していないか |
| ピンバック | ほかのブログからのリンクの知らせ(ピンバック)を、コメント欄などで受け取っていないか |
- サイトを作った方や制作会社がいる場合は、外から投稿・連携する仕組みを入れていないかを聞いておくと確実です。
- 「ユーザー」→「プロフィール」の「アプリケーションパスワード」に登録があれば、「最終使用日」と「最後の IP」が、外の仕組みが今も使っているかの手がかりになります(アプリケーションパスワードは REST API でも使われます)。これは開いているユーザーの分だけで、登録が無いことだけでは、使っていないとは決められません。
- 使っているかどうか分からないときは、確かめが取れるまで、すべてを止めるのは見合わせます。その間は、ピンバックだけを受け付けない設定や、サーバー会社の海外からの制限から始めます(止め方)。
今の状態を確かめる
ブラウザで https://(ご自分のサイト)/xmlrpc.php を開きます。WordPressをサブフォルダ(たとえば /wp/)に入れている場合は、https://(ご自分のサイト)/wp/xmlrpc.php のように、そのフォルダの中を開きます。
| 出た表示 | 考えられること |
|---|---|
| 「XML-RPC server accepts POST requests only.」の1行 | xmlrpc.php には届いています。ただ、この表示だけでは、投稿などの機能が使えるか、止まっているかまでは分かりません(プラグインで、ログインが要る機能だけを止めている場合も、この表示のままです) |
| 「403 Forbidden」・アクセスが拒否された画面 | サーバーの設定やプラグイン、.htaccess で止まっている可能性があります。自分で止めた結果なら、そのままで大丈夫です |
| 「ページが見つかりません(404)」 | 開いたアドレスが違う(サブフォルダなど)、サーバーやプラグインで止めている、またはファイルが無い可能性があります |
サーバー会社の制限には、海外からの接続だけを止めるものがあります。その場合、日本から開くと、制限が効いていても「XML-RPC server accepts POST requests only.」と出ます。表示に加えて、サーバーやプラグインの設定の画面でも確かめます。
止め方
次の方法は、どれか一つを選ぶもので、全部を行う手順ではありません。使い方に合わせて選びます。
| 使い方 | 選ぶ方法 |
|---|---|
| Jetpack やアプリなどで使っている | すべては止めず、サーバー会社の機能で海外などからの接続を制限します。接続の回数を制限できるかも、サーバー会社に確かめます |
| 使っていない | プラグインまたは .htaccess で、すべてを止めます |
| ピンバックだけ要らない | ピンバックだけを受け付けないようにする |
止める前に、ファイルとデータベースのバックアップを取っておきます(バックアップの記事)。設定は一つずつ変え、そのたびにサイトが動くかを確かめます。
1. サーバー会社の機能で制限する
主なレンタルサーバーには、XML-RPC への接続を制限する機能があります。どれも海外などからの接続を制限するもので、すべての接続を止めるものではありません。
| サーバー | 設定する場所 |
|---|---|
| エックスサーバー | サーバーパネル「WordPressセキュリティ設定」→「国外アクセス制限設定」の「XML-RPC API アクセス制限」。国外と一部の国内のホスティングサービスからの接続を制限します(Jetpack からの接続は制限の対象外) |
| ConoHa WING | 「サイト管理」→「サイトセキュリティ」→「WordPressセキュリティ」の「海外アクセス制限」の「XML-RPC-API」(初めから ON) |
| ロリポップ! | 「海外アタックガード」(/xmlrpc.php が守りの対象) |
海外のサーバーを使う外部のサービスから XML-RPC を使っている場合は、この制限で動かなくなることがあります。その場合は、サーバー会社の案内に従って設定を見直します。
2. プラグインで止める
セキュリティのプラグインの中には、XML-RPC を止める機能を持つものがあります。たとえば「SiteGuard WP Plugin」の「XML-RPC 防御」では、ピンバックだけ、または XML-RPC のすべてを止めることを選べます。
- SiteGuard WP Plugin を新しく入れると、ログイン画面のアドレスを変える機能なども一緒に有効になります。入れる前に、ほかの機能の内容も確かめます(ログインできないときの記事の「ログイン画面が開かない」)。
- XML-RPC を止めるだけの小さなプラグインもあります。入れる前に、今のWordPressの版で試験されているか、更新が続いているかを確かめます。
3. .htaccess で止める(慣れた方向け)
xmlrpc.php への接続を、すべて断る方法です。次の例は Apache 2.4 向けの書き方です。書き方や使える設定はサーバーによって違うことがあるため、サーバー会社の案内で使えるかを確かめてから進めます。
- FTP やサーバーのファイルマネージャーで、WordPressを入れたフォルダの
.htaccessを、パソコンに写しておきます。 # BEGIN WordPressから# END WordPressまでの外(上か下)に、次の3行を足します。この間はWordPressが書き換えることがあるため、足した行が消えることがあります。<Files xmlrpc.php> Require all denied </Files>- 保存したら、サイトのトップと管理画面が開くかを確かめます。「500 Internal Server Error」などが出たら、すぐに写しておいた
.htaccessに戻します(500エラーの記事)。 https://(ご自分のサイト)/xmlrpc.phpを開いて、「403 Forbidden」などになっていれば止まっています。
ピンバックだけを受け付けないようにする
XML-RPC を使っていて止められない場合も、ピンバックを使っていなければ、受け付けないようにできます。
- これから書く投稿:「設定」→「ディスカッション」の「デフォルトの投稿設定」で、「新しい投稿に対し他のブログからの通知 (ピンバック・トラックバック) を受け付ける」のチェックを外して保存します。
- すでにある投稿:1の設定は、すでにある投稿には効きません。「投稿」→「投稿一覧」で投稿を選び、「一括操作」の「編集」→「適用」を押し、「トラックバック/ピンバック」を「許可しない」にして「更新」します。投稿の編集画面の「ディスカッション」でも、1本ずつ変えられます。
受け付けない投稿へのピンバックは、相手のページを見に行く前に断られます。
止めた後に確かめること
- 管理画面で、記事の保存・公開と画像のアップロードができるか
- Jetpack を使っている場合は、Jetpack の画面で接続に問題が出ていないか
- アプリや外部のサービスから投稿している場合は、投稿できるか
- サーバーやプラグインの設定の画面で、選んだ設定が有効になっているか。
.htaccessで止めた場合は、xmlrpc.phpを開いて「403 Forbidden」などになるか(今の状態を確かめる)
止めた後に、うまく動かないとき
| 出ている状態 | 確かめるところ |
|---|---|
| Jetpack がつながらない | XML-RPC を止めた設定を戻すか、Jetpack からの接続を通す設定にします。Jetpack の公式の案内(接続の問題の直し方・英語)も確かめます |
| アプリや外部のサービスから投稿できない | そのアプリやサービスが XML-RPC を使っていないか。使っているなら、止めた設定を戻します |
| 管理画面で記事を保存できない | XML-RPC ではなく、REST API が止まっている可能性があります(「有効な JSON レスポンスではありません」の記事・更新できないときの記事) |
| ログイン画面が開かない | プラグインでログイン画面のアドレスが変わっていないか(ログインできないときの記事) |
| サイト全体が「500」になる | .htaccess に足した行。写しておいた元のファイルに戻します(500エラーの記事) |
知らないユーザーが増えている、身に覚えのない記事やページがある、別のサイトに飛ばされるなどの様子がある場合は、すでに入り込まれている可能性があります。XML-RPC を止めるだけでは直らないため、改ざん・乗っ取りの記事の手順で確かめます。
XML-RPC の設定のご相談
WP-ingでは、XML-RPC を使っているかの確かめや設定の変更、止めた後の不具合の修理を承っています。止めてよいか分からないときは、お気軽にご相談ください。
よくある質問
xmlrpc.php のファイルを消してもよいですか?
消すことはおすすめしません。xmlrpc.php はWordPress本体のファイルなので、本体を更新すると、また置かれることがあります。止めるときは、この記事の止め方のいずれかで行います。
REST API も止めたほうがよいですか?
REST API は、今の記事の編集画面などが使っているため、止めると記事を保存できなくなることがあります。XML-RPC と同じように止めることはせず、守りの設定はサーバー会社やプラグインの案内に沿って行います。