SiteGuard の XML-RPC 無効化が効かないときに .htaccess で xmlrpc.php を止める(止まったかの確かめ方つき)

概要説明

SiteGuard の XML-RPC 無効化を保存しても XML-RPC が止まらなかったときに、.htaccess の Files で xmlrpc.php を確実に止める方法。ブラウザの 405 では分からない、POST での確かめ方と、止める前の注意。

不正なログインの試しに使われやすい XML-RPC(xmlrpc.php)を止めるために、SiteGuard WP Plugin の「XML-RPC 防御」で「XML-RPC 無効化」を選んで保存しました。ところが、外から試すと、まだ XML-RPC が答えていました。

同じ設定を作業環境(ローカルの写し)で試すと、ちゃんと止まります。本番だけ止まらない理由は、調べた範囲では分かりませんでした。そこで、プラグインの動きに左右されない .htaccess で止めることにしました。止まっているかの確かめ方と、確かめるときの落とし穴もまとめます。

XML-RPC が止まっているかの確かめ方

ブラウザで https://(サイト)/xmlrpc.php を開くと「XML-RPC server accepts POST requests only.」と出ます。これは止まっていないという意味です。XML-RPC は POST で呼ぶものなので、ブラウザで開く(GET)だけでは、止まっているかどうか分かりません。

確かめるときは、POST で「使える命令の一覧(system.listMethods)」を聞いてみます。

ターミナルで試す(Mac・Linux)

curl
curl -s -o /dev/null -w "%{http_code}\n" -X POST -d '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName></methodCall>' https://example.com/xmlrpc.php

Windows の PowerShell では、curl が別の命令(Invoke-WebRequest)になるので、curl.exe と打ってください。

  • 200:XML-RPC が動いている(命令の一覧が返ってくる)
  • 403:止まっている

ブラウザで開いたときの 405 や「POST requests only」は、XML-RPC が動いているときの返事です。止まっているかは POST の結果で見ます。

SiteGuard の設定だけで止まらなかったとき

SiteGuard WP Plugin(1.8 系)の「XML-RPC 無効化」は、WordPress の xmlrpc_enabled フィルターを無効にするのに加えて、XML-RPC のリクエストが来たら早い段階で 403 を返す作りになっています。作業環境ではこれで 403 になりました。

ただ、本番では設定を保存しても 200 のままでした。プラグインの読み込みを絞るプラグイン(plugin load filter)の古い版を疑いましたが、作業環境で同じ版にしても止まったので、これは原因ではありませんでした。

原因を探し続けるより、確実に止まる方法に切り替えました。

.htaccess で xmlrpc.php を止める

Web サーバー(Apache)の段階で xmlrpc.php へのアクセスを断ります。WordPress もプラグインも動く前に止まるので、プラグインの設定や読み込みの順番に左右されません。

.htaccess のいちばん上に足す(Apache 2.4)

.htaccess
# XML-RPC を止める
<Files xmlrpc.php>
    Require all denied
</Files>

古い Apache(2.2)の書き方

.htaccess
<Files xmlrpc.php>
    Order deny,allow
    Deny from all
</Files>
  • 「# BEGIN WordPress」〜「# END WordPress」の中には書かない(パーマリンクの設定を保存すると書き換えられるため)。いちばん上に書くのがおすすめです。
  • SiteGuard なども .htaccess に書き込むので、上書きの前に今の .htaccess を控えておきます。
  • 足したら、上の curl で 403 になるかを確かめます。トップページなど、ほかのページが開くことも見ます。

止める前に確かめること

XML-RPC を止めると、次のような XML-RPC を使う機能が使えなくなります。使っていないことを確かめてから止めます。

  • スマホの WordPress アプリからの投稿
  • Jetpack の一部の機能
  • 外のサービスやツールから記事を投稿する仕組み(XML-RPC で投稿しているもの)
  • ピンバック・トラックバック

最近の WordPress は REST API が使えるので、XML-RPC がなくても困らないことがほとんどです。

まとめ

  • XML-RPC が止まっているかは、POST(system.listMethods)で確かめる。ブラウザで開いた結果(405)では分からない。
  • プラグインの設定で止まらないときは、.htaccess の「<Files xmlrpc.php>」で止めると確実。
  • 止める前に、XML-RPC を使う機能(アプリ・Jetpack・外からの投稿)を使っていないか確かめる。

関連機能

  1. WordPress のカテゴリーの並び順を変える(Category Order and Taxonomy Terms Order と、コードで並べる方法)

  2. Simply Static で WordPress を静的 HTML にし、.htaccess で HTML があれば返す方法(ログイン中・検索・送信は WordPress へ)

  3. WordPress の管理画面の投稿の一覧にアイキャッチ画像を出す:Admin Columns と、プラグインを使わないコード

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP