こんな記事を書きながら、私も全くといっていいほどREST APIについては無知の状態ですので参考程度に読んでいただければと思います。
私がREST APIを知ったのは、このサイトを階層化して運営しようと考えているときのことでした。
階層化というのは、ドメインのルートにメインのWordPresssサイトを設置し、ジャンル別にサブディレクトリで別のWordPressサイトを作るもの。平たく言うとメインのポータルサイト+テーマ別の子サイトを作ろうというわけ。
WordPressにはマルチサイトという機能があるのはご存知かと思いますが、マルチサイトだと同一のデータベースに複数のWordPressのデータを格納することになるので、これを使って分ける意味があるのか??と個人的には考えています。多分それぞれのサイトのアクセス数が上がってくるとデータベースが火を噴いてアクセス不可、表示速度の低下につながることが考えられるからです。
そうなると複数のデータベースを作ってそれぞれのサイトを独立運用することになるのですが、ここで問題が・・・それはポータルサイトへどうやってそれぞれのサイトの新着記事を表示するのかということ。
単純にRSSを使えば表示は可能ですが、キャッシュを使うので時間差が生じてしまうことからちょっと使いにくいですよね?
そこでいろいろ調べているうちにREST APIというのを知ったというのが経緯です。
WordPressのバージョン4.7から特に何もしなくてもREST APIが利用できるようになったそうですが、すぐに4.7.1がリリースされたの覚えてます??とんでもない脆弱性が発見されたということで更新されたのですが、実はこのアップデートはREST APIでいらん情報まで簡単に読み取れてしまうというものだったようです。
REST APIの便利なところ・危険なところ
公式の解説ページである
によると、特にログインすることもなく、データベースに接続することもなくいろいろな情報が外部から読み取れるようになっているようです。
便利なのはこれを使って他のサイトの新着記事などを表示できること。前述したポータルサイト化するにはもってこいの機能だと思いました。
が、問題が・・・。
実際にいろいろな参考サイトを見てリスト表示してみたらちゃんと動作しました。でも・・・これってどこのドメインからでもできちゃうんじゃないの??ということで実験してみたら・・・見事に読み取ることができました(泣)。これ悪用しようと思ったらいくらでもできちゃうでしょ!!という結論に達しました。世の中いい人ばかりではありませんからね。
いくつかのサイトで同一ドメイン内でないと動作しないなんて書いてありましたが、実際にできてしまったのでこの方法は却下です(ひょっとしたら同一サーバー内ということなのかも知れませんが、そちらも同様にできちゃいましたからそういうことでもないようです)。
そうなると冒頭のリスト表示という問題ではなくREST APIってどうよ??というところへ行ってしまいました(またまた脱線です)。
そこでREST APIを無効にする方法を試してみました。
REST APIを無効にすると・・・
REST APIを無効にする方法もたくさんのサイトで紹介されていますし、プラグインも多数存在します(REST APIで検索するといっぱい出てきます)。
興味深かったのは
WordPressのREST APIを無効化しつつ特定プラグインは動作するようにカスタマイズする方法
の記事。さすがSimplicity2作者のわいひらさんです。無下にREST APIを無効にすると不具合が出るということと、それを解消する対処方法が書かれています。本当にさすが!!ですね。
ただここに掲載されているプラグインなどだけを使っているわけではないのでコピペすれば大丈夫!!ということもなさそうですから、どんなことにREST APIが使われているのかを調べる必要があります。
それができるのが
というプラグイン。いろいろ調べましたがログが取れるのはこのプラグインだけのようです。
しばらくこれを使って記録を取り、本当に除外すべきだけ適用させれば盤石ですね。