WordPress REST APIについて知っておくべきこと

WordpressRestApi 知っておくべきこと

REST APIとは?

**REST API(Representational State Transfer API)**は、WordPressのデータを外部から取得・更新・削除などできる仕組みです。たとえば、JavaScriptを使ったSPA(シングルページアプリケーション)やモバイルアプリと連携する際に活用されます

REST APIの主な特徴

  • JSON形式でのデータ通信
     データは人間にも読みやすい軽量なフォーマット「JSON」でやり取りされます。
  • HTTPメソッドで操作
     GET, POST, PUT, DELETE などのHTTPメソッドを使って、WordPress内の投稿やユーザー情報などを操作できます。
  • 豊富なエンドポイント
     投稿、固定ページ、ユーザー、カテゴリなど、さまざまなデータにアクセス可能です。

よく使う基本エンドポイント一覧

操作エンドポイント例
投稿一覧取得GET /wp-json/wp/v2/posts
投稿の詳細取得GET /wp-json/wp/v2/posts/{id}
投稿の新規作成POST /wp-json/wp/v2/posts
投稿の更新PUT /wp-json/wp/v2/posts/{id}
投稿の削除DELETE /wp-json/wp/v2/posts/{id}

REST APIの活用例

  • フロントエンドとWordPressの分離
     ReactやVue.jsと組み合わせて、ヘッドレスCMSとしてWordPressを使うケース。
  • モバイルアプリとの連携
     アプリから投稿一覧を取得したり、お問い合わせを送信したりできます。
  • 他のWebサービスとの統合
     外部のAPIと連携し、データ統合や通知機能を実現可能です。

REST APIのセキュリティ上の懸念点

WordPressのREST APIには、以下のようなエンドポイントがあります:

/wp-json/wp/v2/users

このエンドポイントでは、ログインしていない状態でも次のようなユーザー情報が取得可能です:

  • 表示名(name)
  • スラッグ(slug)
  • ユーザーID(id)
  • アバターURL(avatar_urls)
  • プロフィール文(description)

この情報が攻撃者に悪用される可能性もあるため、必要がないなら非公開にするのが望ましいです。

ユーザー情報をREST APIから完全に非表示にする方法

以下のコードを functions.php に追加するだけで、ユーザー情報のエンドポイントを完全に削除できます。

add_filter('rest_endpoints', function($endpoints) {
unset($endpoints['/wp/v2/users']);
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
return $endpoints;
});

解説

このコードでは、rest_endpoints フィルターを使い、REST APIで公開される users 関連のルートを削除しています。

  • 一般ユーザーや攻撃者が /users にアクセスしても「404 Not Found」が返されます。
  • 投稿・ページなどの他のエンドポイントには影響ありません。

さらに強固にしたい場合:管理者のみAPIアクセスを許可する

REST API全体を「管理者のみアクセス可能」にしたい場合は、以下のコードを追加します。

add_filter('rest_authentication_errors', function ($result) {
if (!empty($result)) {
return $result;
}

if (!is_user_logged_in() || !current_user_can('administrator')) {
return new WP_Error(
'rest_forbidden',
'You do not have permissions to access this API.',
array('status' => 403)
);
}

return $result;
});

⚠ 注意点

  • このコードはREST API全体に制限がかかるため、Gutenbergや一部プラグインの動作に支障が出る可能性があります。
  • 投稿やメディアの取得などを許可したい場合は、個別の制御がおすすめです。

実装時の注意点

  • functions.php にコードを追加する前に、バックアップを取得しましょう。
  • 子テーマを使っている場合は、子テーマ側に追記するのが安全です。
  • REST APIを利用するプラグインの動作確認も忘れずに行いましょう。

まとめ

項目内容
対策内容REST APIのユーザー情報公開を防ぐ
方法①rest_endpoints フィルターで /users エンドポイントを削除
方法②rest_authentication_errors フィルターで管理者以外をブロック
メリットセキュリティ向上、ユーザー名の漏洩防止

総括

WordPressのREST APIは非常に便利な機能ですが、その利便性の裏には情報漏洩のリスクも潜んでいます。
今回紹介したような方法で不要な情報を非公開にすることで、セキュリティレベルを大きく向上させることができます

セキュリティ対策は「気づいたときが始めどき」。
ぜひこの機会に、REST APIの公開範囲を見直してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です