WordPress4.7より追加されたREST API エンドポイントを無効にする

oEmbedのみを有効にして、その他のREST API エンドポイントを無効

wordpress-logo-notext-rgbWWordPress 4.7(WP4.7)がリリースされました。主な新しい機能の中で「REST API コンテンツエンドポイントの導入」とあるので、気になるので調べてみました。

そもそも「REST API」とは何ぞや?ということですが、わざわざWordPressの管理画面にアクセスして、記事更新や新しいカテゴリなどを行わなくても、RESTというもので通信を行ってできるというもの。具体的には、この通信を行うスマホアプリなどを開発すれば、WordPressの管理画面にアクセスしなくとも記事更新などができるよというような感じで、例えば、FacebookやTwitterもWebの管理画面ではなく、アプリからつぶやきや記事のアップができますが、あんな感じのアプリを開発すればWordPressにもできちゃいますって感じです(このようなアプリは今から本格的にでてくると思います)。

ところで、Webの管理画面は、標準では「http://www.example.jp/wp-admin/」のようなURLで、第三者からの侵入を防ぐために「wp-admin」にあたる部分を変更したり、ログインロックインのpluginを導入したり、ログインはパスワードだけじゃなくてキャプチャをいれるpluginを導入したり、いろいろと対策をしますが、この「REST API」でもWebの管理画面と同じようなことできるとなれば、こちらもいろいろと対策しないとセキュリティ的に危険です!

今回のWP4.7の「REST API コンテンツエンドポイントの導入」とは、「RESTというもので操作できるものが増えました」ということで、下記のような感じです。

WordPress 4.6では下記の1つ

この度のWordPress 4.7ではREST APIでWeb管理画面並のことができるようになりました

  1. oEmbed(コンテンツ埋め込み)の対応 [表示のみ]
  2. 投稿記事(Post) [一覧の取得・表示・追加・更新・削除・revision取得]
  3. 固定ページ(Page) [一覧の取得・表示・追加・更新・削除・revision取得]
  4. メディア [一覧の取得・表示・追加・更新・削除]
  5. コンテントタイプの種類 [表示]
  6. カテゴリー [一覧の取得・表示・追加・更新・削除]
  7. タグ [一覧の取得・表示・追加・更新・削除]
  8. カスタムタクソノミー [表示・編集]
  9. WordPressユーザ [一覧の取得・表示・追加・更新・削除]
  10. コメント [一覧の取得・表示・追加・更新・削除]

などなど、

何ができるようになったのかは下記のようなURLで自分のホームページにアクセスすれば、JSONという形式で表示されます。上記はそれをわたしがファジーに日本語で列挙したのですが間違いがありそうで自信なしです。詳しくは、JSONデータと「WP REST API」のマニュアルでご確認ください。

http://www.example.jp/wp-json/
もしくは、
http://www.example.jp/index.php?rest_route=/

「REST API」でいろいろなアプリやシステムと連携ができ、これからもWordPressは進化するような良い機能ですが、反面セキュリティ的に心配の部分もありますので、oEmbed(コンテンツ埋め込み)もREST APIも対応したくない方はプラグイン「Disable Embeds」で無効化できるようです。

oEmbed(コンテンツ埋め込み)の対応 だけ有効化して、その他を無効化したい場合は、上記のプラグインだとすべて無効化されてしまいますので、下記のようなコードをfunctions.phpに追加すると良さげです。


function my_limit_rest_init() {
	// Remove the REST API endpoint.
	remove_action( 'rest_api_init', 'create_initial_rest_routes', 99);
}
add_action( 'init', 'my_limit_rest_init', 9999 );

余談ですが、オイラは「rest_enabled」にadd_filterしてWP4.6のときからRESTは無効化してるから大丈夫という方もいらっしゃると思うのですが、WP4.7からこのフィルターフックは、「apply_filters_deprecated」となり無力化されていますので、WP4.7にアップすると「WP REST API」が全開で有効になってしまいます。ご注意ください。