FormRescue — WordPressの問い合わせデータを、手元に引き取る

FormRescue は、WordPressの問い合わせフォームに届いたデータを、 Cloudflare上の小さな受信箱を経由して自分の端末に引き取るための仕組みと 管理アプリです。データを溜める場所をWordPressから切り離す(デカップリング)ことで、 サイトに侵入されても、そこに失うデータがない状態を作ります。

サイト全体を作り直す本格の移行(aiseed-migration-kit)の手前に、 今日できる一歩として設計されています。

なぜ今、問い合わせフォームなのか

WordPressは全ウェブサイトの約4割を占め、攻撃者にとって一つの脆弱性が 数千万サイトに効く標的です。新規に発見された脆弱性は2024年の7,966件から 2025年は11,334件へ42%増え(Patchstack)、その9割超はプラグイン由来。 2025年上半期に見つかった脆弱性の57.6%は認証不要——訪問者が誰でも そのまま悪用できるものでした。

そして攻撃は自動化され、AIによってさらに増えています。ガードレールの弱い オープンモデルが脆弱性の探索と攻撃コードの生成に使われ、脆弱性の公開から 悪用までの時間は数時間単位に縮みました。パッチの適用速度で追いつく対策は、 この増加と永久に追いかけっこになります。

問い合わせフォームが狙われるのは、その背後に顧客データ(名前、メールアドレス、 問い合わせ内容)が溜まっているからです。守り続けるのではなく、 盗まれて困るものをWordPressの中から無くす——それがこの仕組みの答えです。

方針 — プラグインを足さず、外す

よくある対策は「セキュリティプラグインを追加する」ですが、 プラグインを入れれば脆弱性が付いてきます——例外はありません。 実際、フォームデータの転送によく使われるプラグインには、認証不要で悪用可能な SSRF脆弱性が公表されたことがあります(CVE-2026-11395、CVSS 7.2)。 守るために穴を足すのは本末転倒です。

FormRescue の構成では、WordPressに加える変更は 問い合わせフォームを素のHTMLフォームに差し替えるだけ。 フォーム系プラグイン(CF7、CF7 to Webhook など)はむしろ外します。 テーマ・PHPには触れず、カスタムHTMLブロックにフォームを一つ置くだけです。

書き込みの門は、WordPressの中に置く鍵ではなく、 送信ごとのTurnstileトークンをCloudflare Worker側で検証(siteverify)することで 担います。破られる箱の中に長期の鍵を置かないので、 WordPressが侵入されても受信箱を開ける鍵は漏れません。

仕組み — 三つの場所

[Webサイト]                    [Cloudflare]              [ローカルPC/スマホ]
素のHTMLフォーム               Worker + D1               取得 → SQLite → 人が確認
  + Turnstile → 直POST  ───→  POST /submit で一時保存 ←── GET /items / POST /ack
                              (Turnstile検証)

要になる規則は一つです。受信箱からの削除は、人が内容を読んで「確認」したときだけ。 自動削除も期限切れ削除もありません。取得の失敗や見落としで 問い合わせが消える経路を、設計から無くしています。

管理アプリ FormRescue

日常に使うのは管理アプリだけです。

実装は二つあり、どちらも同じ仕様です。

どちらもデータも鍵も端末の外に出しません。クラウドに管理画面はなく、 問い合わせデータが置かれるのは、Cloudflareの受信箱(確認までの一時保存)と あなたの端末の中だけです。

守れるもの、守れないもの

正直に範囲を書きます。

静的化への地続き

この構成のフォームは、既に素のHTML + Turnstile + 直接POSTです。 将来サイトを静的HTMLに作り直しても(移行キットの領分)、 フォームも受信箱も管理アプリもデータの引き取りも、一日も途切れずそのまま使えます。 WordPressと一緒に捨てるものは、フォームを載せていたページの器だけです。

つまり FormRescue は、独立した応急処置ではなく、 最終形のフォーム設計を先取りする最初の一歩です。

構築の流れ(概要)

  1. Cloudflareアカウントを作る(無料・カード登録不要)。Turnstileウィジェットを作成
  2. 受信箱(Worker + D1)を設置スクリプト(deploy.py)で一回デプロイ。 完了時にQRコードが表示される
  3. WordPressの問い合わせフォームを素のHTMLフォームに差し替え、 フォーム系プラグインを外す
  4. 管理アプリでQRを読み取り、テスト送信が届くことを確認

コードはすべて仕様書からAIが実装し、人が仕様と照合して確認します。 かつてプロが1日以上かけた構築が、この形なら数時間で終わります。


サイト全体の移行(脱CMS・文書・メール・業務)は aiseed-migration-kit へ。 他の道具は OSSパッケージ紹介 へ。