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パターンまとめて比較

制御方法 メリット 注意点
管理者のみアクセス許可
  • 管理者だけアクセス可能
  • サイトの安全性がさらに高まる
  • 管理者以外はアクセス不可
  • 一般ユーザー向けプラグインでREST APIを使う機能は制限される
ログインユーザーのみアクセス許可
  • プラグインやGutenbergは動作
  • 外部からの不正アクセスを防止
  • ログインユーザー以外はアクセス不可
完全無効化
  • 簡単に無効化可能
  • 外部アクセスを完全にブロック
  • GutenbergやJetpackなど一部機能が動かなくなる
補足:
・ここでいう「ログインユーザー」とは、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やプラグインも管理者であれば問題なく動作します。

ログインユーザーのみアクセス許可のポイント

  • 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 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を無効化する代わりに、プラグイン「Disable REST API」を使う方法もあります。簡単にオンオフ切り替えが可能です。

まとめ

  • REST APIを無効化する場合、プラグインやGutenbergの動作に注意
  • functions.phpにコードを追加するだけで簡単に制御可能
  • 必要に応じて管理者ユーザーのみアクセス許可、ログインユーザーのみアクセス許可、完全無効化で制御