freelancemate
cover 当サイトはアフィリエイト広告経由のサービスを含みます

WordPressのRESTAPIの注意点と無効化する方法

更新日:2022年10月02日

WordPressにはデフォルトでREST APIが使えるように設定されており、APIを使った開発ができるようになっています。REST APIをうまく使うことができれば、便利なことも多い一方で、気をつけないとセキュリティが危ないケースもあるため、注意が必要です。

WordPressのAPIでデータを確認する方法

WordPressで作ったサイトでREST APIを無効化する処理を行なっていない場合には、実際にどんなデータが作られているか確認することができます。
例えば、"https://サイトドメイン/wp-json/"とアドレスバーに入力するとそのサイトに関する情報が確認できますし、"https://サイトドメイン/wp-json/wp-json/wp/v2/posts/"と入力すると、投稿記事一覧に関する情報が確認できます。

WordPress REST APIの問題点

上記のように、WordPress側でREST APIに対する処理を行なっていない場合には、自動的にAPIでデータを取得することが可能になっており、URLも自動的に設定されています。
しかし、この自動設定こそが知らないうちに問題を引き起こしているかもしれないのです。

ユーザー情報もAPIで確認できてしまう

WordPressの管理画面にログインする場合には、ユーザー名とパスワードを入力してログインを行いますが、このログインに使用するユーザー名がREST APIで自動的に公開されてしまっています。パスワードが判明しなければ、ユーザー名だけでのログインは不可なので、これだけで確実にログインを許すわけではありませんが、突破にかかる時間が短縮されるのは明らかです。

APIのURLは原則統一されている

WordPressの構造全てに言えることではありますが、APIのURLはどのサイトでも原則同じになります。そのため、悪意のある人間にWordPressで作られたサイトであると分かってしまうと、自動的にAPIのURLも分かってしまうことになるのです。
仮にAPI URLに対して何も対策をしていない場合には、真っ先に上記ユーザー情報のAPI URLにアクセスされる可能性が高いです。

WordPress REST APIを無効化する方法

ここまで記事を読んで不安になった人もいるかもしれません。でも大丈夫です。対策方法はあります。WordPress REST APIは無効化することが可能です。
下記のコードをfunctions.phpにコピペしてください。

function disable_rest_api() {
  return new WP_Error( 'disabled', array( 'status' => rest_authorization_required_code() ) );
}
add_filter( 'rest_authentication_errors', 'disable_rest_api' );


このコードをfunctions.phpに設定することで、全てのREST APIが無効化され、重要な情報が外部に漏れないようになります。
簡単に対策ができるので、やっておくのがよいでしょう。

REST APIを無効化する際の注意点

無効化するということはREST APIを使った機能が使えなくなってしまうことを意味しています。
ただ、REST APIを利用することを前提に作られたプラグインなどもあり、そういったプラグインを使っている場合には、少し工夫が必要です。具体的なプラグイン例で使用率が高そうなプラグインとして Contact Form7があります。

function deny_restapi_except_plugin( $result, $wp_rest_server, $request ){
  $namespaces = $request->get_route();
  
  if( strpos( $namespaces, 'contact-form-7/' ) === 1 ){
    return $result;
  }

  return new WP_Error( 'rest_disabled', array( 'status' => rest_authorization_required_code() ) );
}
add_filter( 'rest_pre_dispatch', 'deny_restapi_except_plugin', 10, 3 );


上記のように設定することで、Contact Form7の場合のみREST APIを有効化し、プラグインが使えないといった事象を避けることができます。

便利な反面セキュリティ不安があるので要確認

最近では開発経験が少なくてもWordPressを使ってサイト制作を受託開発している人もいるかと思いますが、WordPressはセキュリティ面で不安があるのも事実なので、理解した上で適切な利用が求められますね

参考記事
WordPress『 WP REST API 』#1 ブログを他のサイトに埋め込む方法