PR 本記事には広告(Amazonアソシエイト・もしもアフィリエイト・A8.net等)が含まれます。掲載情報の正確性には努めていますが、商品の詳細は必ずリンク先で最新情報をご確認ください。
CTF・セキュリティ学習

【お問い合わせフォーム編】迷惑送信・入力悪用・個人情報を守る設計|CTF思考フレームワーク #05

かも次郎とアンペンが「お問い合わせフォーム」を解説するマスコットイラスト
安全に生きたい編集部

こんにちは、アンペンです!

前回は、検索フォームの入力が画面とサーバーに渡るときに、XSSやSQLiの入口になる話をしました。

今回は、利用者が運営者に直接情報を届けるお問い合わせフォームを見ていきます。送信先がメールや管理画面という「運営者の足元」にあるからこそ、別の種類の攻撃に狙われやすい場所です。

お問い合わせフォームって、ただ運営者にメッセージを送るだけだよね?

そう見えるけど、送信内容がメールや管理画面に直接届くから、スパムやメール改ざんの入口になるんだ。

お問い合わせフォーム、送ったことはあっても『これがセキュリティの話になるの?』とピンと来ない人が多いかもしれません。でもここは、これまでの“利用者が狙われる”話とちょっと毛色が違います。今回ねらわれるのは、なんと運営者のほう。フォームの“向こう側”にいる人が標的になる、という新しい視点を持って読み進めてみてください。きっと、見慣れた問い合わせ画面が少し違って見えてきます。

まず結論

お問い合わせフォームは、利用者の入力が運営者のメール・管理画面に直接届きます。対策を忘れると、スパム送信・CSRF・メールヘッダー改ざんの入口になります。

この記事で分かること

  • お問い合わせフォーム特有のリスク3つ(スパム・CSRF・メール改ざん)
  • 「運営者を狙う」攻撃が成立する仕組み
  • 演習環境での観察方法と、守る側の基本対策
難易度:はじめて向け 所要時間:9分 体験:送信先の経路を追う おすすめ:#04の後

📖 はじめてのWebセキュリティ #05|お問い合わせフォーム編
利用者と運営者をつなぐフォームを題材に、「届く先」がリスクになる構図を学びます。 シリーズ一覧を見る →

⚠️ 大事なお約束
この記事の確認は、CTF・公式ラボ・自分で作った検証環境だけで行ってください。実在するサイトのフォームから、スパムや改ざんを試す行為は絶対にしないでください。

お問い合わせフォームは「届く先」が攻撃面になる

お問い合わせフォームの入力は、検索フォームと違って画面には残りません。代わりに、運営者のメールアドレスや管理画面に直接届きます。

『画面に残らない』というのが、地味だけど重要なポイントです。検索フォームなら入力結果が自分の画面に出るので、おかしな挙動にも気づけました。でもお問い合わせは、送ったら最後、その後どう処理されるかは利用者からは見えません。見えない場所で何が起きているかを想像する力——それが、この回のかくれたテーマでもあります。

つまり、攻撃者がここを狙うときの相手は、サイト利用者ではなく運営者です。

この『相手が運営者』という視点、最初はピンと来ないかもしれません。でも思い出してみてください。運営者のメールボックスや管理画面は、サイトの“心臓部”にとても近い場所です。そこへ外部の誰もが自由に紙を投げ込めるなら、攻撃者にとってこんなに都合のいい入口はありません。

ここがこれまでの回との大きな違いです。検索フォームでは、入力は画面に返ってきて“利用者自身”に跳ね返りました。でもお問い合わせの入力は、画面には残らず、運営者のメールボックスや管理画面という“奥の部屋”に届きます。つまり攻撃者にとってフォームは、『運営者の机の上に、好きな紙を直接置ける投函口』に見えているわけです。だから守りの発想も、利用者向けとはガラッと変わってきます。

図解:お問い合わせの送信経路

お問い合わせフォームから入力されたデータが運営者のメールと管理画面に届く流れを示した経路図
お問い合わせの入力は、運営者の足元(メール・管理画面)に直接届く。

普通の問い合わせと、悪意ある送信を比べると、たどる経路は同じでも、結果に大きな差が生まれます。

言いかえると、フォームというのは“来た紙を疑わずに受け取る”という、もともと無防備な性質を持っています。だからこそ、受け取る側で『この紙は信用できるか』をきちんと仕分ける関所が必要になるわけです。

店頭のご意見箱に色々な紙が投函されている様子のたとえ図。お問い合わせフォームも同じ構造
誰でも投函できる仕組みでは、悪戯紙や偽の依頼書も届いてしまう。入口を絞る対策が必要。
📬 たとえるなら、お店のご意見箱

お店の入口に「ご意見箱」が置いてあるとします。本来はお客様の声を集める仕組みですが、誰でも好きな紙を入れられるため、悪戯紙やチラシ、店長を騙すような偽の依頼書まで入ってしまうかもしれません。お問い合わせフォームも、入口を絞らなければ「投函されたもの全部」を運営者が処理することになります。

ここで覚える用語:CSRF(クロスサイトリクエストフォージェリ)
利用者がログイン中の状態を悪用して、別のサイトから本人の意思に反して送信させる攻撃です。お問い合わせフォームを使って、攻撃者が用意した文面が本人名義で送信されてしまう、というような形で成立します。

CSRFは少しイメージしづらいので、もう少しかみくだきますね。たとえばあなたが、あるサイトにログインしたまま、別のページを開いていたとします。そこに仕掛けられた“見えないボタン”が、あなたのブラウザを使って、あなたの名前で勝手にフォームを送信してしまう——これがCSRFです。あなた自身は何も悪いことをしていないのに、あなたの操作として記録されてしまうのが怖いところ。だから守る側は『本当にこのサイトの画面から送られた操作なのか?』を毎回たしかめる仕組みを用意します。

お問い合わせフォームから狙われる3つの攻撃

お問い合わせ周りの代表的なリスクは、大きく3つです。『大量に送りつける』『他人になりすまして送らせる』『メールの宛先をこっそり書き換える』。どれも“フォームが正しく動いているのに”起きるのがポイントで、バグというより、入口を絞っていない設計のゆるさが原因なんです。一つずつのぞいていきましょう。

代表的なリスク

スパム大量送信・CSRF・メールヘッダー改ざんの3つの攻撃パターンを示したカード型インフォグラフィック
①スパム ②CSRF ③メール改ざん――対策は『入口・経路・出口』の3段階で組み合わせる。
  • スパム大量送信:自動化されたボットが、宣伝・詐欺リンクを大量に投げ込み、運営者の受信箱を埋める
  • CSRF:ログイン中の利用者を経由して、本人の意思に反した送信が行われる
  • メールヘッダー改ざん:入力欄に改行と追加ヘッダーを混ぜることで、別の宛先にもメールが届くようにされる

これらは、フォーム自体は「正しく動いて」いても起こります。攻撃者は仕様の隙間や、運営者側の処理を狙ってきます。

ここ、すごく大事な考え方です。私たちはつい『バグがあるから攻撃される』と思いがちですが、お問い合わせフォームの攻撃の多くは、プログラムが仕様どおり完璧に動いていても成立します。なぜなら攻撃者が突くのは“バグ”ではなく、『誰でも・何でも送れてしまう』という仕様そのものの緩さだから。だから直し方も、『コードのバグ取り』ではなく『入口に関所を設ける』という発想になるんです。

3つの中でも、初めて聞くと驚くのが『メールヘッダー改ざん』かもしれません。仕組みはこうです。フォームの名前欄やメール欄に、こっそり“改行”と「Bcc: 知らない宛先」のような一文を紛れ込ませる。すると、システムがその入力をメールの設定欄にそのまま組み込んでしまった場合、本来の運営者だけでなく、攻撃者が指定した相手にもメールが飛んでしまうんです。たった一つの改行が、メールの“宛名書き”を乗っ取ってしまう——これが「CRLFインジェクション」と呼ばれる手口です。

名前を書く欄で、メールの宛先まで変えられちゃうの?さすがに大げさじゃない?

それが本当に起きるんだ。コンピュータは『改行のあとに書かれた指示』を律儀に読んでしまうことがあるからね。だから守る側は、入力に紛れた改行をきっぱり捨てる。たった一手間だけど、これでメールの宛名を勝手にいじられる道をふさげるんだよ。

CTFでやってみよう:送信先と入力の関係を観察する

やってみよう / 演習環境限定

普通の入力と「改行入り」の入力を、演習環境で観察してみよう

目的は攻撃を成立させることではなく、入力が「どこに、どんな形で渡るか」を見ることです。

  1. CTFや自分の検証環境で、お問い合わせフォームのソースを開き、送信先(action)とメソッド(method)を確認する
  2. 名前欄に普通の文字列(例:山田太郎)を入れて送信し、ログや管理画面でどう保存されたか確認する
  3. 名前欄に改行と短い文字列を混ぜたテスト入力を入れて、保存先の表示が変わるか比べる
  4. CSRFトークンの input が含まれているか、フォーム内を確認する
  5. ReCAPTCHAなどのボット対策が動いているかを観察する
攻撃用のメールヘッダーや大量送信は、本物のサービスでは絶対に試さないでください。「自分のラボで、自分の入力がどう扱われるか」だけを確認します。

演習でフォームのソースをのぞいてみると、『お、CSRFトークンが入ってるな』『CAPTCHAが動いてるな』と、守りの“仕掛け”が見えてきます。逆に何も入っていなければ、それは無防備のサイン。こうして観察できるようになると、守る側の発想がぐっと身近になります。では、その守りをどう組み立てるか。キーワードは『入口・経路・出口』の3点です。

守る側なら、入口・経路・出口の3点で守ろう

お問い合わせフォームの守り方は、「入口で絞り込む・経路を本人だけに限定する・出口で安全に処理する」の3段階で考えると整理しやすくなります。

守るための基本チェック
  • ReCAPTCHAやhCaptchaなどのボット対策を入れ、自動化された大量送信を防ぐ
  • CSRFトークンを発行して、フォーム送信が本サイト内からの操作か確認する
  • メールヘッダーを組み立てる前に、入力中の改行(CR/LF)を除去・拒否する
  • 入力長や添付ファイルの種類・サイズに上限を設ける
  • 送信先メールには、入力をそのまま件名・宛先に使わず、固定値で構成する
  • 送信ログを残し、同一IPからの大量送信は速度制限で抑止する

お問い合わせは「運営者に届く」から、守る方向も違うんだね。

そう。利用者を守る画面と、運営者を守るフォーム、両方の視点を持てると強いよ。

ここまでをひと言でまとめると、お問い合わせフォームは『運営者の机に直結した投函口』。だから守りは、利用者を守るときとは別の引き出しを開ける必要があります。そして大切なのは、どれか一つではなく、入口・経路・出口の対策を“重ねて”使うこと。関所は一つより、いくつもあるほうが安心ですよね。

まとめ:お問い合わせフォームは「運営者の入口」

今回のポイント
  • お問い合わせは入力が運営者のメール・管理画面に直接届く
  • スパム・CSRF・メール改ざんの3つの攻撃を意識する
  • CTFでは、入力の送信先と扱われ方を観察する
  • 守る側は入口・経路・出口の3段階で対策を組み合わせる

今日の持ち帰りは『フォームの“向こう側”を想像する』ことです。入力がどこに届き、誰の手元で、どんなふうに使われるのか。そこまで思い描けると、入口(CAPTCHA)・経路(CSRFトークン)・出口(改行除去)という3段の守りが、自然と腑に落ちるはずです。逆に、向こう側を想像できないと、どんな対策も“とりあえず入れただけ”になってしまいます。

次回は、ユーザーが何かを送るシリーズの続きとして、ファイルアップロードを扱います。「ただ画像を送るだけ」が、なぜRCEの入口になりうるのかを見ていきましょう。

次に読みたい記事

参考資料

記事URLをコピーしました