WordPressのREST API無効化・アクセス制限の手順|ユーザー情報漏洩や不正アクセスを防ぐセキュリティ対策

WordPressのREST API(REpresentational State Transfer Application Programming Interface)は、外部アプリケーションや外部システムとWordPress内のデータを安全かつスムーズに連携させるための標準機能です。しかし、標準で有効化されているため、特別な対策を行っていない場合、第三者が簡単なURLリクエストを送信するだけでログインユーザー名やサイトの内部構造を取得できてしまうセキュリティ上のリスクが存在します。

結論として、外部のWebシステムやモバイルアプリとの高度な連携を行っていない一般的な企業ホームページの場合、認証されていない「非ログインユーザー(未認証ユーザー)」に対するREST APIへのアクセス制限や特定の危険なエンドポイントの無効化を行うことが推奨されます。本記事では、REST APIの仕組みから放置するリスク、具体的な無効化・アクセス制限の手順、トラブルを防ぐための注意点まで、保守運用のプロの視点でわかりやすく解説します。

WordPressのREST APIとは?基本概念と仕組み

REST APIとは、HTTPリクエストを通じてWebサーバー上のデータ(投稿記事、固定ページ、カテゴリー、ユーザー情報など)をJSON形式で取得・操作できる仕組みです。WordPress 4.7以降、Core(本体)に標準機能として組み込まれました。

従来のWebサイトでは、サーバー側でPHPがHTMLを生成してブラウザに表示させていましたが、REST APIを活用することで、JavaScriptを中心としたフロントエンド技術(ReactやVue.jsなど)からWordPressのデータを呼び出す「ヘッドレスCMS」構成の構築や、スマートフォンアプリへのデータ提供が容易になりました。

REST APIが使われている具体的な場面

WordPress内部でも、REST APIは活発に利用されています。代表的な例は以下の通りです。

  • Gutenberg(ブロックエディター):投稿や固定ページの編集画面において、記事の自動保存やブロックの即時描画、ドラッグ&ドロップ操作などにREST APIが使用されています。
  • 外部サービスやアプリとの連携:他社システムやスマートフォンアプリ、SNSの投稿連携ツールなどからWordPressのコンテンツを自動投稿・取得する際に利用されます。
  • 動的なWebフロントエンド:Jamstack(Next.jsやNuxt.jsなど)を活用してWordPressをバックエンドとしてのみ運用するヘッドレス開発で使用されます。

このように開発者や高度な運用においては非常に強力なツールである反面、標準で「誰でもアクセスできる状態」になっている点がセキュリティ上の課題となります。

REST APIを無効化・制限しない場合のリスクとデメリット

REST API対策を行わずにデフォルトのまま運用を続けると、悪意のある第三者やボット(自動プログラム)によってサイトの内部情報が収集され、攻撃の足がかりにされる危険性があります。具体的なリスクは以下の4点です。

1. ユーザー名(ログインID)の特定リスク

最も顕著なリスクは、ログインID(ユーザー名)の漏洩です。ブラウザのアドレスバーに「https://example.com/wp-json/wp/v2/users」を入力してアクセスするだけで、WordPressに登録されている投稿者や管理者アカウントのユーザー名、スラグ情報がJSON形式で公開表示されてしまいます。

ログインIDが特定されると、攻撃者はパスワードさえ突破すれば管理画面へ不正侵入できるようになります。これにより、総当たり攻撃(ブルートフォース攻撃)や辞書攻撃の成功率が格段に高まってしまいます。

2. サイト構造・非公開情報の収集とスクレイピング

REST API経由では、投稿一覧や固定ページ、使用されているカテゴリー、タグ、下書きデータの一部、インストールされている一部プラグインの情報などが整然とした構造化データ(JSON)として取得可能です。

悪質な競合他社やボットによって、サイト内の全文章や画像データを機械的に高速収集(スクレイピング)されたり、サイト構造の脆弱性を調査されたりする原因となります。

3. DDoS攻撃やサーバー負荷の増大

REST APIのエンドポイントは、データベースへの検索クエリを伴う重い処理を実行することがあります。悪意のある第三者が大量のAPIリクエストを連続して送信すると、データベースサーバーの負荷が急上昇し、Webサイト全体の表示速度が低下したり、サーバーがダウン(503 Service Unavailable等)したりする恐れがあります。

4. プラグインやテーマの脆弱性を突いた改ざんリスク

サードパーティ製のプラグインやテーマがREST APIに独自のエンドポイントを追加している場合、権限チェック(認証)の記述に不備(脆弱性)が存在することがあります。過去にも、REST APIの認証不足を突かれてページ内容が改ざんされる被害が世界中で発生しています。

REST APIを無効化・アクセス制限する具体的な手順

REST APIのリスクに対処するためには、サイトの運用形態に合わせた適切な制限を設けることが必要です。完全に無効化する方法から、非ログインユーザーのみを制限する方法まで、代表的な3つの手法を解説します。

手法1:プラグインを活用した無効化・制限(推奨)

コードの編集に不安がある場合や、安全に設定を行いたい場合はセキュリティプラグインや専用プラグインを使用するのが最も確実です。

  • Disable REST API:未ログインのユーザーに対してREST APIへのアクセスを禁止し、認証済みのログインユーザーのみ許可するプラグインです。ブロックエディター(Gutenberg)の動作を妨げずに安全性を確保できます。
  • SiteGuard WP Plugin:日本の主要なレンタルサーバーでも導入されているセキュリティプラグインで、REST APIの無効化(または特定のAPIの制限)をワンクリックで設定可能です。

プラグインを導入する際は、管理画面の「設定」メニューから「非ログインユーザーのみ制限する」設定を有効化します。これにより、一般訪問者からの情報収集を防ぎつつ、管理者自身のエディター操作は正常に維持できます。

手法2:functions.phpにコードを追加して非ログインユーザーを制限する

テーマのfunctions.phpファイルに直接プログラムを記述することで、プラグインを増やさずにREST APIへのアクセスを制御できます。子テーマを使用し、事前にバックアップを取得した上で以下のコードを追加します。

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result;
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_not_logged_in', 'REST APIへのアクセスはログインが必要です。', array( 'status' => 401 ) );
    }
    return $result;
});

この記述により、非ログインユーザーが/wp-json/配下のデータにアクセスしようとした場合、HTTPステータスコード「401 Unauthorized(認証が必要)」を返し、データの閲覧をブロックします。

手法3:特定のエンドポイント(/wp/v2/users)のみをピンポイントで無効化する

REST API自体は活用したいが、ユーザー情報(ログインID)の漏洩だけを防ぎたい場合は、ユーザーエンドポイントのみを無効化する記述を行います。

add_filter( 'rest_endpoints', function( $endpoints ) {
    if ( isset( $endpoints['/wp/v2/users'] ) ) {
        unset( $endpoints['/wp/v2/users'] );
    }
    if ( isset( $endpoints['/wp/v2/users/(?P<id>[d]+)'] ) ) {
        unset( $endpoints['/wp/v2/users/(?P<id>[d]+)'] );
    }
    return $endpoints;
});

この処理を入れることで、他のAPI機能を阻害することなく、`/wp-json/wp/v2/users`へのリクエストに対してのみ情報を返さないように設定できます。

REST APIの無効化・制限時に注意すべき影響とトラブル回避策

REST APIを安易に「完全無効化(すべての通信を遮断)」にしてしまうと、Webサイトの表示や運用管理で重大なトラブルが発生することがあります。以下の影響を事前に把握しておきましょう。

影響を受ける機能 不具合の内容 回避策・対処法
Gutenbergエディター 記事の保存失敗、「更新に失敗しました」というエラー表示、下書き保存の停止。 完全無効化ではなく「ログインユーザーのみ許可」または「未認証アクセスのみ拒否」の設定にする。
問い合わせフォームプラグイン Contact Form 7等のAjax送信が機能せず、送信完了画面に進まない。 該当プラグインが使用するREST APIエンドポイントをホワイトリスト(許可リスト)に指定する。
外部アプリ・EC連携 WooCommerceの受発注管理アプリやスマホ投稿アプリの通信エラー。 APIキー認証を設定し、特定の外部IPや認証済トークンからの通信のみを通過させる。
ヘッドレスCMS構成 フロントエンド(Next.js等)でのページ再構築・ビルド失敗。 ビルドサーバーのIPアドレス制限またはアクセストークンを用いた認証を組み込む。

トラブルを回避するベストプラクティスは、「無闇にREST API全体を完全に閉じるのではなく、未認証の第三者(非ログインユーザー)からの閲覧を制限し、信頼できる通信のみを許可する」運用を徹底することです。

REST API対策と併せて実施すべきWordPressセキュリティ強化策

REST APIの無効化やアクセス制限は、WordPress全体のセキュリティ対策における一つの要素に過ぎません。Webサイトを改ざんや不正侵入から強固に守るためには、多層的なセキュリティ対策を組み合わせることが不可欠です。

XML-RPC機能の停止・無効化

REST APIと並んで攻撃の標的になりやすいのが、旧来の遠隔操作機能である「XML-RPC(xmlrpc.php)」です。XML-RPCはブルートフォース攻撃やDDoS攻撃の踏み台に悪用される事例が非常に多いため、特別な理由がない限り無効化しておくべきです。具体的なリスクと設定方法はWordPressのXML-RPC(xmlrpc.php)機能のリスクと無効化手順|ブルートフォース攻撃・DDoS攻撃を防ぐプロのセキュリティ対策をご覧ください。

管理画面のログイン保護とIP制限

管理画面(/wp-admin/およびwp-login.php)への不正アクセスを防ぐため、ログインURLの変更、2段階認証(TOTP)の導入、社内IPアドレスからの接続に限定するIP制限の適用を強く推奨します。設定手順の詳細はWordPress管理画面のセキュリティ対策完全ガイド|ログインURL変更・2段階認証・IP制限の実装手順で詳しくまとめています。

定期的なマルウェアスキャンとバックアップ体制

万が一、プラグインの脆弱性などを突かれて不正ファイルが設置された場合に備え、定期的なマルウェアの検知と復旧用バックアップを自動化しておくことが重要です。万が一のトラブル時の手順についてはWordPressサイトのマルウェア感染・改ざんの原因と復旧手順|被害特定から再発防止策までプロが解説をご確認ください。

安全なプラグイン選定と保守運用

長期間更新されていないプラグインや開発元が不明なテーマは、REST APIをはじめとする脆弱性の温床になります。導入基準を明確にし、不要なプラグインは削除することが基本です。安全な運用ルールについてはWordPressプラグインの選び方とセキュリティリスク回避|安全な導入基準と保守運用ポイントが参考になります。

WordPressのREST APIに関するよくある質問

Q1. REST APIを完全に無効化するとSEO評価に悪影響はありますか?

A. 原則として、検索エンジンのクローラー(Googlebotなど)によるインデックス登録やSEO評価に直接の悪影響はありません。GoogleはWebページの公開HTMLを巡回してインデックスを行うため、REST APIがオフであっても検索順位が下がることはありません。ただし、JavaScriptを多用したサイトでREST API経由でコンテンツを描画している特殊なサイト構成の場合は、正しくレンダーされなくなるリスクがあるため注意が必要です。

Q2. REST APIのユーザー情報(/wp-json/wp/v2/users)だけを非公開にすれば十分ですか?

A. ログインIDの特定を防ぐという意味では、ユーザーエンドポイントの非公開化だけでも大きな効果があります。しかし、投稿データやプラグイン固有の情報取得、DDoS攻撃のリスクを考慮すると、サイト全体の要件に合わせて「非ログインユーザー全体の制限」を行う方がより包括的で安全です。

Q3. 自分のサイトでREST APIが公開されているか確認するにはどうすればよいですか?

A. ログアウトした状態(またはシークレットウィンドウ)で、ご自身のサイトURLの末尾に「/wp-json/wp/v2/users」や「/wp-json/」を付けてブラウザでアクセスしてください。ユーザー名やサイト情報が大量のテキスト(JSON形式)として表示された場合は、外部から自由にアクセスできる状態になっています。エラーメッセージや401/403画面が表示されれば制限されています。

Q4. 設定変更によってWebサイトが表示崩れを起こした場合の復旧方法は?

A. functions.phpへの記述ミスで画面が真っ白(500エラー等)になった場合は、FTPソフトやサーバーのファイルマネージャーからfunctions.phpを元の状態に書き戻すことで即座に復旧します。作業前には必ずファイルのバックアップをローカル環境に保存してください。

まとめ

WordPressのREST APIは、現代的なWebシステムやアプリ開発に不可欠な利便性を提供する一方で、対策を怠るとログインIDの漏洩や攻撃の標的となるリスクを抱えています。

自社ホームページの用途を正しく把握し、不要なエンドポイントの閉鎖や非ログインユーザーに対するアクセス制限を適用することで、サイトの利便性を損なうことなく安全性を大幅に高めることができます。適切なセキュリティ設計を行い、持続可能で安全なWebサイト運用を実現しましょう。

イノベートスコープ株式会社では、WordPressサイトのセキュリティ診断やアクセス制限設定、保守運用、サーバー移管まで総合的にサポートしております。自社サイトのセキュリティ対策に不安がある企業様は、ぜひお気軽にご相談ください。

CONTACT

Web制作・SEO・AIOについてお気軽にご相談ください

ホームページ制作・リニューアル、WordPress、SEO・AIO対策、 ECサイト、Web集客、保守・セキュリティなど、 Webに関するご相談を承っています。 「何から相談すればよいかわからない」という段階でもお気軽にお問い合わせください。

お問い合わせフォーム