WordPress REST APIの403エラーを「サブドメイン」で解決する最強のWAF回避術

この記事の内容について、業務や開発でお困りの場合は個別に対応できます。

WAFは切りたくない、でもAPIは使いたい

こんにちは、ZIDOOKAです。 WordPressのREST APIを使って画像をアップロードする際、WAF(ウェブアプリケーションファイアウォール) に阻まれて 403 Forbidden エラーが出ることがあります。

「WAFを無効にすれば解決する」というのは有名な話ですが、セキュリティの観点からメインサイトのWAFは切りたくないというのが本音でしょう。

そこで今回は、「メインサイトのWAFを有効にしたまま、APIによる画像アップロードだけを成功させる」 という、セキュリティと利便性を両立させるテクニックを紹介します。

解決策:API専用のサブドメインを作る

結論から言うと、「画像アップロード(API利用)専用のサブドメイン」 を用意しました。

仕組み

レンタルサーバー(今回はLolipop!)のWAF設定は、ドメイン(サブドメイン)ごとに独立しています。これを利用します。

  1. メインサイト (example.com):

    • 一般ユーザーが閲覧する場所。
    • WAF:有効 (ON)
    • セキュリティを高く保つ。
  2. API用サブドメイン (api.example.com):

    • 自分(CLIツール)だけがアクセスする場所。
    • 設定:API用に調整
    • REST APIのエンドポイントとして使用。

実装手順

  1. サブドメインを作成する: サーバーの管理画面でサブドメインを作成し、メインサイトと同じディレクトリ(またはWordPressがインストールされているディレクトリ)を参照させます。

  2. 設定を変更する: サブドメイン側のセキュリティ設定を、API利用に支障がないように調整します。メインサイトの設定は強固なまま維持できます。

  3. APIクライアントの設定を変える: 自作のCLIツールやプログラムからの接続先(エンドポイント)を、メインのURLからサブドメインに変更します。

    // 変更前
    const apiUrl = 'https://example.com/wp-json';
    
    // 変更後
    const apiUrl = 'https://api.example.com/wp-json';
    

セキュリティと副作用について

「WAFを切る=無防備」になるのでは?と心配されるかもしれません。 しかし、この手法は「攻撃面を限定する」という設計思想に基づいています。

さらなるセキュリティ強化策

API用サブドメインをさらに安全にするために、以下の対策を組み合わせるのがおすすめです。

  • IP制限: 自宅やCI/CD環境(GitHub Actionsなど)のIPアドレスのみ許可する。
  • Basic認証: Webサーバー側でBasic認証をかけ、APIクライアント側でヘッダーを追加する。
  • 権限の最小化: APIを利用するユーザーには「管理者」ではなく「投稿者」権限のみを与える。

副作用の確認

  • メディアURL: アップロードされた画像のURLは、設定次第でメインドメイン (example.com) にもサブドメイン (api.example.com) にもなり得ます。SEOを気にする場合は、メインドメインのURLで返されるようにWordPress側を設定するか、CDNを挟むのが良いでしょう。
  • SSL: サブドメインにも必ずSSL (HTTPS) を設定してください。

他の回避策との比較

手法 セキュリティ 再現性 備考
WAF全解除 × 危険 ◎ 高い 推奨されません。
User-Agent偽装 △ 微妙 △ 低い WAFのルール次第で防げない場合あり。
プラグイン調整 △ 普通 △ 中 プラグインに依存するため環境による。
サブドメイン分離 ◎ 安全 ◎ 高い 設定が明確で、恒久的な対策になる。

まとめ

これにより、以下のような理想的な環境が構築できました。

  • Webサイトへの攻撃: メインサイトのWAFがブロックしてくれます。
  • API経由のアップロード: サブドメイン経由で行われるため、WAFに邪魔されずに成功します。
WAF Settings

「403エラーが出るからWAFを全解除する」というのは最終手段です。 このように入り口(ドメイン)を分けることで、セキュリティリスクを最小限に抑えつつ、自動化のメリットを享受できます。

WordPressのREST APIで403エラーに悩んでいる方は、ぜひ「サブドメイン戦略」を試してみてください。

https://zidooka.com/

ZIDOOKA!

この記事の内容について、対応できます

この記事に関連する技術トラブルや開発上の問題について個別対応を行っています。

個別対応は3,000円〜 内容・工数により事前にお見積りします
最後までお読みいただきありがとうございました

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AI活用に関するポリシー

当サイトでは、記事の執筆補助にAIを活用する場合がありますが、全面的な委任は行いません。