WordPressの外部連携はREST APIが安心 XML-RPCを無効化してみた記録
はじめに
WordPressを外部から操作するときに、XML-RPC や REST API という言葉を見かけることがあります。
ただ、どちらも似たように見えて、「結局どちらが安全なのか」「今は何を使えばよいのか」が分かりづらいと感じることはないでしょうか。
今回は、WordPressを外部から操作する仕組みとして使われてきた XML-RPC と REST API の違いを、セキュリティ面の観点から整理してみました。あわせて、実際に XML-RPC を無効化してみたメモも残しておきます。
この記事では、次のような内容をまとめます。
- XML-RPC と REST API の違い
- なぜ XML-RPC が危険と言われやすいのか
- 実際に XML-RPC を無効化した方法
結論
先に結論を書くと、今回の理解では、XML-RPC は古い仕組みでリスクが大きく、REST API のほうが安全に扱いやすい という整理になりました。
XML-RPC は、外部アプリが通信するたびに本来のログイン情報を直接使うイメージに近く、攻撃の対象になりやすい面があります。
一方で REST API は、アプリ専用のパスワードやトークンのような形で管理しやすく、必要になればその連携だけを止めやすいのが大きな違いだと感じました。
XML-RPCの危険なところ
今回調べた中で印象に残ったのは、XML-RPC は古い仕組みで、セキュリティ面の不安が大きいという点でした。
イメージとしては、家の鍵でたとえると、普段使っている本当の鍵をそのまま渡してやり取りしているような状態です。
そのため、次のような危険があると理解しました。
- ログイン情報を何度も試される総当たり攻撃の対象になりやすい
- 1回の通信で複数回の試行ができる仕組みが悪用されやすい
- 大量アクセスによる負荷攻撃に使われることがある
こうした点から、使っていないのであれば無効化を検討したほうが安心だと感じました。
REST APIが比較的安心な理由
今回の整理では、REST API は XML-RPC に比べてかなり扱いやすい仕組みだと感じました。
こちらは、家の鍵でいえば専用のゲスト用カードキーのようなイメージです。
本来のログインパスワードをそのまま外部連携に使うのではなく、アプリ専用のパスワードなどで管理できるため、万が一トラブルがあったときにもその連携だけ止めやすいのが利点です。
- 普段使っているログイン情報を直接使わずに済む
- 専用のパスワードだけを無効化できる
- 外部連携ごとに管理しやすい
そのため、今後 WordPress を外部から操作するなら、XML-RPC より REST API を使うほうが安心だと感じました。
実際にXML-RPCを無効化してみた
今回、XML-RPC を無効化する方法を調べたところ、プラグインを使う方法、functions.php を使う方法、.htaccess を使う方法があることが分かりました。
その中で、今回は .htaccess を使う方法を試しました。
というかfunctions.php の方法ががうまくいかなかったので、.htaccess の方法を試したら無効化できたって感じです^^;
.htaccess に追加した内容
WordPress のコメント終端付近に、次の内容を追加しました。
# xml-rpc.phpを無効化する
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
設定後に保存して反映させます。
無効化できているか確認する方法
無効化されているかどうかは、次のように xmlrpc.php へ直接アクセスして確認できます。
あなたのサイトURL/xmlrpc.php
アクセスしたときの状態は、次のように見分けられます。
- 無効化されていない場合: 「XML-RPC server accepts POST requests only.」と表示される
- 無効化されている場合: 403 エラーや 404 エラーになる
環境によって表示は多少異なることがあるようですが、今回実際に https://blog.astha.jp/xmlrpc.php にアクセスしたところ、403 エラーになっていて無効化を確認できました。
無効化するときの注意点
XML-RPC を無効化すると、安全性の面では安心しやすくなりますが、その一方で影響する機能もあります。
たとえば、次のようなものが使えなくなる可能性があるそうです。
- WordPress のスマホアプリからの投稿や編集
- Jetpack など一部プラグインの機能
要はXML-RPCを使っている機能がある場合は当然使えなくなると。
そのため、これらを利用している場合は、完全に無効化する前に運用への影響を確認したほうがよさそうです。
もし XML-RPC を残す必要があるなら、Basic認証や IP 制限など、別の対策を組み合わせる考え方もあると理解しました。
まとめ
今回は、WordPress を外部から操作する仕組みとしての XML-RPC と REST API の違いを、セキュリティの観点から整理しました。
今回のポイントをまとめると、次のようになります。
- XML-RPC は古い仕組みで、セキュリティ面のリスクが大きいと感じた
- REST API は専用パスワードなどで管理しやすく、より安心して扱いやすい
- 使っていない XML-RPC は無効化を検討する価値がありそうだと感じた
WordPress を外部連携で使う予定があるなら、まずは自分の環境で XML-RPC が必要かどうかを確認し、そのうえで REST API を中心に考えるのが良さそうです。
ディスカッション
コメント一覧
まだ、コメントがありません