REST API、と言っても、僕自身よく分かっていないのですが(えー)(挨拶)
と、いうわけで、フジカワです。
今日は生駒聖天寶山寺とサムハラ神社への月参りに行ってきたわけですが。
その辺の話は、本日のnoteをご参照ください。
![]()
今年最後の月参りに行ってきた。|不二川巴人
毎度、不二川です。 今日は予定通り、生駒聖天寶山寺とサムハラ神社への月参りに行ってきました。何が収穫だったかって、生駒ケーブル梅屋敷駅から、寶山寺奥の院参道へ出る、「正しいルート」が分かったことです。先月は地図を無視して適当に歩いたので、...
今日のエントリは、「REST APIの例外追加コード!」とかいった話です。
レディゴー
続きを読む
早速本題
前フリ無しでコードに飛びたい方は、こちらをクリックしてください。
えっとですね? お名前ドットコムサーバーで、月に一回セキュリティチェックを(有料で)やってるわけですが。
致命的な問題はなくとも、改善できる隙があるなら、埋めたいじゃあないですか?
その中の一つが、「REST APIの無効化」。
最初は僕も、色々調べてみて、「REST APIを全面的に無効にする手段」は見つけました。
ただ、気付いたんですよね。
どうやら、プラグインのうち、
- Jetpack(アクセス解析)
- Google SiteKit(同じくアクセス解析)
- Contact Form7(メールフォーム)
この3つは、REST APIを使っている模様。
ドツボ!?
実際、完全にREST APIを無効にすると、管理画面で各種解析が出ない。
ってことは、例外を加えなければならないわけですが……ハテ? さっぱりわからんちん!
ええい! こちとらド文系なんじゃい! PHPのコーディングなんか分かるか!
もそっと、コピペ一発でなんとかならんか!?
ドツボか!? と思ったのですが、ハタと思いつきました。
そうだよ! こういう時こそ、課金しているGoogleGeminiじゃあないか!
ってことで、「いい感じにコーディングして?」と、お願いしてみました。
肝心のコード!
で。肝心のコードがこちら。
/**
* REST APIを無効化(JetpackとGoogle Site Kit、ログインユーザーは除外)
*/
function my_disable_rest_api_except_plugins( $result ) {
// すでにエラーが発生している場合はそのまま返す
if ( ! empty( $result ) ) {
return $result;
}
// 1. ログインユーザーは許可する
// (これを行わないと、管理画面のブロックエディタなどが動かなくなります)
if ( is_user_logged_in() ) {
return $result;
}
// 現在アクセスされているREST APIのルート(パス)を取得
$route = empty( $GLOBALS['wp']->query_vars['rest_route'] ) ? '' : $GLOBALS['wp']->query_vars['rest_route'];
// 2. 許可する名前空間(プラグインごとの識別子)のリスト
$whitelist = array(
'jetpack', // Jetpack用
'google-site-kit', // Google Site Kit用
'contact-form-7', // Contact Form 7用
);
// ホワイトリストに含まれる文字列がルートに含まれているかチェック
foreach ( $whitelist as $plugin_namespace ) {
if ( strpos( $route, '/' . $plugin_namespace . '/' ) !== false ) {
return $result; // 許可リストにあるのでアクセスを許可
}
}
// 3. 上記以外はエラー(アクセス拒否)を返す
return new WP_Error( 'rest_forbidden', 'REST API is disabled for security.', array( 'status' => 401 ) );
}
add_filter( 'rest_authentication_errors', 'my_disable_rest_api_except_plugins' );
使い方としては、“function.php”に追記する形になります。
使用テーマがCocoonの場合、管理画面の「外観」から、「テーマファイルエディタ」を開き。
子テーマの”function.php”に追記してください。
僕の方でも、動作確認は取りました。
やあ、課金した甲斐があろうというものです。
皆様のお役に立てば幸いです。
んじゃまた。
コメント