REST APIを無効化の方法
目次
REST API(Representational State Transfer API)とは、WordPressや他のアプリケーションと外部プログラムがデータをやり取りするための仕組みです。
簡単に言うと:
- WordPressの投稿、ページ、コメント、ユーザー情報などを外部から取得・更新できる窓口
- Webブラウザだけでなく、スマホアプリや別のサイト、プログラムからもデータを操作できる
- URLとHTTPメソッド(GET, POST, PUT, DELETE)を使ってやり取りする
WordPress REST APIは便利ですが、使わない場合はセキュリティ上の理由で無効化することも可能です。この記事では、REST APIを無効化する方法を紹介します。
REST APIの制御方法を3パターンまとめて比較
制御方法 | メリット | 注意点 |
---|---|---|
管理者のみアクセス許可 |
|
|
ログインユーザーのみアクセス許可 |
|
|
完全無効化 |
|
|
補足:
・ここでいう「ログインユーザー」とは、WordPressにログイン済みの全てのユーザー(購読者・投稿者・編集者・管理者など)を指します。
・管理者のみアクセス許可と区別することで、権限ごとのAPIアクセス制御が明確になります。
・ここでいう「ログインユーザー」とは、WordPressにログイン済みの全てのユーザー(購読者・投稿者・編集者・管理者など)を指します。
・管理者のみアクセス許可と区別することで、権限ごとのAPIアクセス制御が明確になります。
管理者ユーザーのみアクセス許可のポイント
- is_user_logged_in()でログイン状態を確認
- current_user_can('administrator')で管理者権限かを判定
- 管理者以外はWP_Errorで403エラーを返す
functions.php にコードを追加
/* 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',
'REST APIは管理者のみアクセス可能です。',
array('status' => 403)
);
}
return $result; // 管理者ならアクセス許可
});
補足:
サイトの安全性がさらに高まり、管理者だけREST APIを使えるので、外部アプリや一般ユーザーによる不要なアクセスを防止します。Gutenbergやプラグインも管理者であれば問題なく動作します。
サイトの安全性がさらに高まり、管理者だけREST APIを使えるので、外部アプリや一般ユーザーによる不要なアクセスを防止します。Gutenbergやプラグインも管理者であれば問題なく動作します。
ログインユーザーのみアクセス許可のポイント
- GutenbergやJetpackなどのプラグインも動作する
- 外部からの不正アクセスを防げる
- 必要に応じて、管理者だけにアクセス許可するように拡張可能
- functions.phpにコードを追加するだけで簡単に制御可能
functions.php にコードを追加
/* REST API: ログインユーザーのみアクセス許可 */
add_filter('rest_authentication_errors', function($result) {
if (!empty($result)) {
return $result;
}
if (!is_user_logged_in()) {
return new WP_Error(
'rest_forbidden',
'REST APIはログインユーザーのみアクセス可能です。',
array('status' => 403)
);
}
return $result; // ログイン済みならアクセス許可
});
補足:
フックrest_authentication_errorsを使います。(REST APIへのリクエストがあったときに「アクセス許可」を判定するフィルターです。)
ログインしていないユーザーを弾き、非ログインユーザーにはエラーを返します。
フックrest_authentication_errorsを使います。(REST APIへのリクエストがあったときに「アクセス許可」を判定するフィルターです。)
ログインしていないユーザーを弾き、非ログインユーザーにはエラーを返します。
完全に無効化の実装のポイント
- REST APIを完全に無効化すると、外部アプリやプラグインがAPIを利用できなくなる点に注意
- 管理者やログインユーザーのみアクセス可能にする方法もある
- functions.phpにコードを追加するだけで簡単に制御可能
functions.php にコードを追加
/* REST API を無効化(非推奨) */
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
/* 追加でログインユーザーのみアクセス許可する例 */
add_filter('rest_authentication_errors', function($result) {
if (!empty($result)) {
return $result;
}
if (!is_user_logged_in()) {
return new WP_Error(
'rest_forbidden',
'REST APIはログインユーザーのみアクセス可能です。',
array('status' => 403)
);
}
return $result;
});
補足:
REST APIを無効化すると、Gutenberg(ブロックエディタ)やJetpackなど一部プラグインが正常に動作しなくなる場合があります。必要に応じてログインユーザー制御だけに留める方法がおすすめです。
REST APIを無効化すると、Gutenberg(ブロックエディタ)やJetpackなど一部プラグインが正常に動作しなくなる場合があります。必要に応じてログインユーザー制御だけに留める方法がおすすめです。
代用プラグイン
REST APIを無効化する代わりに、プラグイン「Disable REST API」を使う方法もあります。簡単にオンオフ切り替えが可能です。
まとめ
- REST APIを無効化する場合、プラグインやGutenbergの動作に注意
- functions.phpにコードを追加するだけで簡単に制御可能
- 必要に応じて管理者ユーザーのみアクセス許可、ログインユーザーのみアクセス許可、完全無効化で制御