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の公開範囲を見直してみてください。
コメントを残す