WordPressのデフォルト動作ではREST APIを無効にする手法をお伝えします。
「JetPack・Contact Form 7」でのみREST APIが有効化されるようになっています。「REST API機能のセキュリティ」や「REST APIの脆弱性を突いたコンテンツ改ざん」などを考えると無効にしたいと考える人もいますよね。その場合の手法をおしえます。また停止した場合の注意点をお伝えします。
WordPressのRESTAPIなぜ無効化するの?設定されているかの確認
設定されているかの確認です。
設定の確認
WordPressサイトのURLの後ろに「/wp-json/」や「/wp-json/wp/v2/」を付けてアクセスすると、JSON形式のデータが表示されると思います。
データが表示されれば、REST APIが有効になっているということです。
なぜ無効化にする!セキュリティに問題がある
セキュリティの問題です。
WordPressはPHPで構築されています。外部から簡単に投稿情報などを取得できてしまうので、REST APIを使わないのであれば、機能自体を無効化しておいた方がよいでしょう。
REST APIはWordPress への攻撃にも使われることもないとはいえません。
注意点は?Contact Form 7などプラグインが動作しなくなる
有名どころだとContact Form 7やJetpackがREST APIを利用しています。自分が直接 REST API を使うことはなくてもプラグインが使っていることがあります。
functions.phpに追加するコードを以下のように変更することで、特定のプラグインを除外できます。
そのためREST APIへの全てのアクセスを無効化してしまうとプラグインが正常に動作せず、不具合を起こしてしまう可能性があります。
無効化の方法は?
REST API機能はデフォルトで有効化されるようになっています。
試しに「サイトURL/wp-json/wp」などREST APIのURLにアクセスしてみてください。エラーが返ってきて正常にデータを取得できなくなっているはずです。
よって、無効化するにはテーマのfunctions.phpに追加する必要があります。
function disable_rest_api() {
return new WP_Error( 'disabled', __( 'REST API is disabled.' ), array( 'status' => rest_authorization_required_code() ) );
}
add_filter( 'rest_authentication_errors', 'disable_rest_api' );
サイトURLの後ろに「/wp-json/」や「/wp-json/wp/v2/」を付けてアクセスしてみてください。以下のような内容が表示されたら、REST APIが無効化されています。
{"code":"disabled","message":"REST API is disabled.","data":{"status":401}}
特定のプラグインを除外する方法
「JetPack・Contact Form 7」でのみREST APIが有効化するようにします。
function deny_restapi_except_plugins_demo( $result, $wp_rest_server, $request )
{$namespaces = $request->get_route();
//oembedの除外
if( strpos( $namespaces, ‘oembed/’ ) === 1 ){return $result;}//Jetpackの除外if( strpos( $namespaces, ‘jetpack/’ ) === 1 ){return $result;}//Contact Form7の除外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_plugins_demo’, 10, 3 );
まとめ
今ではWordprssが外部機能と連携することが多くなりますので除外機能を利用してうまくつかったほうがよいかもしれませんね。
コメント