MENU

REST APIを無効化する方法

WordPressのREST APIは、テーマやプラグインの開発で便利ですが、使用しない場合はセキュリティの観点から無効化を検討することが推奨されます。

特に、サイトの情報が不正に取得されるリスクを軽減したい場合には、REST APIの無効化が有効です。

目次

解説

REST APIはWordPressのJSONベースのエンドポイントで、ユーザー情報や投稿データなどが取得可能です。必要のない場合や、外部からの不正なアクセスを防ぐため、REST APIを無効化する方法があります。

ただし、完全に無効化してしまうと一部のプラグイン(例:GutenbergエディタやWooCommerce)に影響が出る可能性があるため、慎重な判断が必要です。

REST APIを無効化するコード

// REST APIを無効化
function disable_rest_api_for_non_logged_in_users($result) {
    if (!is_user_logged_in()) {
        return new WP_Error(
            'rest_disabled',
            __('REST APIは無効化されています。', 'text-domain'),
            array('status' => 403)
        );
    }
    return $result;
}
add_filter('rest_authentication_errors', 'disable_rest_api_for_non_logged_in_users');
  1. rest_authentication_errorsフィルターフックを使用して、REST APIにアクセスがあった際の認証をカスタマイズしています。
  2. is_user_logged_in()関数で、ログインしていないユーザーの場合に、REST APIへのアクセスを禁止します。
  3. アクセスが禁止された場合、403エラーとともに「REST APIは無効化されています」というメッセージを返します。

難易度 

基本的なPHPの知識があれば、REST APIの無効化は簡単に行えます。ただし、REST APIを無効化すると、一部のプラグインが動作しなくなる場合があるため、テストが必要です。

ポイント

  • ユーザーがログインしていない場合のみREST APIを無効化しているため、管理者や編集者が必要なAPIにアクセスすることは可能です。
  • セキュリティ強化として、不要なエンドポイントへのアクセスを防ぎます。

Q&A

完全にREST APIを無効化することは可能ですか?

可能ですが、Gutenbergエディタやプラグインの一部が正常に動作しなくなる可能性があります。そのため、全てのユーザーに対して完全に無効化するのは推奨されません。

完全にREST APIを無効化する例

add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');

上記のコードはプラグインやテーマに影響を与える可能性があるため、注意が必要です。

一部のエンドポイントだけを無効化できますか?

可能です。以下のように、特定のエンドポイント(例:ユーザー情報)だけを無効化することもできます。

function disable_user_endpoint($endpoints) {
    unset($endpoints['/wp/v2/users']);
    return $endpoints;
}
add_filter('rest_endpoints', 'disable_user_endpoint');

まとめ

REST APIの無効化は、WordPressサイトのセキュリティを強化するための有効な手段です。

ただし、すべてのREST APIを無効化すると、一部のプラグインやテーマに影響を与えるため、非ログインユーザーのみ無効化するなどの柔軟な対応が推奨されます。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

WordPress Love! 休日はほぼWordPress仲間と一緒に勉強会や写真を撮りに行っています。現在育児中のため、オフが多いです(>△<<<)

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次