wp-jsonへのアクセスをログインユーザーのみに制限する方法【WordPress】

WordPressのREST APIは初期状態のままだと、記事のデータやユーザー名などの情報を誰でも取得できてしまいまます。

しかし、記事のデータならまだしもユーザー名を不特定多数に公開する必要性はない。

記事のデータだって、REST APIという便利な仕組みを通じて公開されていれば、それだけで簡単にパクることができます。全自動であなたのWordPressサイトのコンテンツが複製されていく、そんな状態は望ましくない。

そこで、REST APIのエンドポイントであるwp-jsonへのアクセスをログインユーザーのみに制限するという対策をしてみましょう。

wp-jsonへのアクセスをログインユーザーのみに制限する方法

やることはとても簡単です。以下のコードをテーマのfunctions.phpに追記してください。

add_filter( 'rest_authentication_errors', 'only_authorised_rest_access');
function only_authorised_rest_access( $result ){
    if( ! is_user_logged_in() ) {
        return new WP_Error( 'Error', 'You don\'t have permission to access this resource.', array('status' => 403));
    }
    return $result;
}

このコードの解説

このコードではログインユーザー以外がREST APIにアクセスした場合に、403エラーを返してアクセスを拒否するようにしています。

コード内の403を404に変えれば、そもそもREST APIのエンドポイントが存在しないかのように見せかけることもできます。

ボットへの対策としては404を返すのは有効かもしれませんが、人が直接確認すると他の404ページと違った表示になるためあまり効果はないかもしれません、

REST API周りで同時にしたいセキュリティ対策

なお、REST APIへのアクセスをログインユーザーのみに制限するのであれば、次のセキュリティ対策もしておきたいところ。

  • REST APIのエンドポイントを記事内に出力しない設定
  • REST APIのエンドポイントのURLを変える設定(こちらの記事で解説)

あわせて検討してみてください。