なぜAIが作ったフォームの送信先を確認すべきなのか
生成AIは「お問い合わせフォーム付きのページを作って」と頼むと、それらしいHTMLを返してくれます。ただ、その入力欄に打ち込んだ名前やメールアドレスが実際にどこへ届くのかまでは、コードを読まないとわかりません。見た目が整っていても、送信先が空欄だったり、見知らぬ外部サービスを指していたりするケースは珍しくありません。
特に問題になりやすいのが、学習データに含まれていたサンプルの送信先がそのまま残っているパターンです。デモ用のメール収集サービスや、無関係な第三者のエンドポイントが書かれていると、利用者が入力した個人情報がそこへ流れてしまう恐れがあります。
公開前にひと手間かけて送信先を確かめるだけで、こうした情報漏えいのリスクは大きく下げられます。まずはどこを見ればよいのかを押さえましょう。
フォームの送信先はHTMLのどこに書かれているか
フォームの送信先を決めているのは、主にform要素のaction属性です。「<form action="...">」のカギカッコ内に書かれたURLが、入力データの宛先になります。ここが自社のサーバーや想定したサービスを指しているかを、まず目視で確認します。
ただし、最近のAI製HTMLはJavaScriptで送信を制御するものも多く、action属性だけ見れば十分とは限りません。fetchやXMLHttpRequestといった命令で別のURLへデータを送っている場合があるため、scriptタグの中身もあわせて読む必要があります。
チェックすべき代表的なポイントを挙げます。
- form要素のaction属性に書かれた送信先URL
- method属性がgetかpostか
- script内のfetchやaxiosなどの送信先
- mailto:で指定された宛先メールアドレス
- 見覚えのない外部ドメインや短縮URL
よくあるNG例と安全な直し方
AI製HTMLのフォーム送信先を確認では、「検索に出さない」と「見られないようにする」を混同しないことが重要です。noindexやrobots.txtは検索エンジンへの指示であり、アクセス制限そのものではありません。
安全に共有するには、誰に見られると困るかを先に決め、URL共有だけで足りるのか、認証や期限が必要なのかを選びます。共有相手と機密度が決まったら、URLのみ・パスワード・メール認証・会社ドメイン認証のどれで渡すかを選びます。
- NG: 機密情報入りHTMLを認証なしURLで共有し、noindexだけで安心する
- OK: パスワード・メール認証・会社ドメイン認証で閲覧者を絞る
- NG: テスト用APIキーや社内URLをHTML内に残したまま渡す
- OK: 公開前に外部送信先、秘密情報、フォーム送信先を確認する
送信先を実際に確認する手順
コードに不慣れでも、テキストとして開けば送信先はたいてい見つけられます。次の順番で確認すると漏れがありません。
- HTMLファイルをテキストエディタで開く
- 文字列「action=」を検索してフォームの宛先を確認する
- 文字列「fetch」「mailto:」「.send」を検索して送信処理を探す
- 見つかったURLのドメインが自分の想定どおりか照合する
- 身に覚えのないドメインがあれば、その行を削除するか送信先を正しく書き換える
- ブラウザの開発者ツールのネットワークタブで、送信時に通信が走る宛先を実地で確かめる
action属性だけで終わらせない追加チェック
フォームの送信先確認で見落としやすいのは、action属性以外の経路です。ボタンのクリックイベントでfetchが呼ばれている、iframe内のフォームを使っている、外部のフォーム作成サービスのscriptが差し込まれている、といった作り方では、見た目のformタグだけでは判断できません。
共有前に「入力した値がどこへ出ていく可能性があるか」を一枚のメモにしておくと、レビュー相手にも説明しやすくなります。送信が不要なレビューなら、送信ボタンを無効化してUI確認に限定するのが安全です。
- script内のfetch / XMLHttpRequest / axiosのURLを検索する
- iframeや外部scriptがフォーム機能を差し込んでいないか見る
- GET送信の場合、入力内容がURLに残らないか確認する
- 送信テストをしない共有では、入力禁止と明記する
確認しても判断しきれないときの考え方
URLを見ても、それが安全かどうか即断できないこともあります。判断に迷ったら、その送信先が「自分が契約・用意したサービスか」を基準にするとわかりやすくなります。心当たりのないドメインは、いったん送信を止める前提で扱うのが安全です。
注意したいのは、HTMLを静的に公開する場合、フォームの受信処理はサーバー側で動かないという点です。PHPなどのサーバー処理を前提にしたactionは静的環境では機能せず、入力は外部サービスへ送られるか、どこにも届かないかのどちらかになります。受信して保存する仕組みが本当に必要なら、別途その手段を用意する必要があります。
つまり送信先の確認は、「意図しない外部送信を防ぐ」ことと「動くと思っていた処理が実は動かない」ことの両面で意味を持ちます。
公開前のチェックをギガサイト便で行う手順
手作業の確認に加えて、公開時に自動で兆候を知らせてくれる仕組みがあると安心です。ギガサイト便はアップロード時にセキュリティスキャンが走り、外部フォーム送信や外部スクリプト依存などの気になる点を検出して警告します。内容を理解したうえで公開するかどうかは自分で選べます。
次の流れで、送信先の確認と限定公開をまとめて行えます。
- トップページにHTMLやZIPをドロップしてアップロードする
- スキャンの警告に「外部フォーム送信」などの指摘がないか確認する
- 指摘があればコードを見直し、送信先を修正して再アップロードする
- 公開範囲をパスワード認証や会社ドメイン認証など必要な方式に設定する
- 公開期限を設定し、不要になったら自動で閲覧できないようにする
- アクセスログで誰がいつ閲覧したかを確認する
送信テストをしないまま共有する場合の扱い
AI製HTMLには、見た目だけのフォームと、実際に外部へ送信しようとするフォームが混在することがあります。送信先を確認できないまま共有する場合は、フォームを動くものとして見せず、レビュー対象をUI確認に限定するのが安全です。
相手に誤って入力させないために、送信ボタンを無効化する、ダミーであることを画面内に書く、レビュー依頼文で「送信はしないでください」と明記するなど、期待値を揃えてからURLを渡します。
- フォームのaction属性とmethod属性を確認する
- 送信先が未確認なら、送信ボタンを無効化する
- 個人情報を入力しないよう依頼文に書く
- 実フォーム化する前に、送信先・保存先・通知先を別途設計する
よくある質問
HTMLのフォーム送信先はどこを見ればわかりますか
基本はform要素のaction属性に書かれたURLが送信先です。あわせてscriptタグ内のfetchやmailto:の指定も確認してください。JavaScriptで別のURLへ送っている場合があるため、action属性だけでは判断しきれないことがあります。
AIが作ったフォームの送信先が空欄でした。問題ありますか
action属性が空欄だと、入力データは同じページに送られるだけで、どこにも保存されないのが一般的です。情報漏えいの心配は小さい一方、フォームとして機能していないため、受信が必要なら別の手段を用意する必要があります。
静的なHTMLでもフォームから情報が漏れることはありますか
はい。action属性やJavaScriptが外部サービスのURLを指していれば、入力内容はそこへ送られます。静的公開ではサーバー処理は動きませんが、外部への送信自体は起こり得るため、送信先のドメインを必ず確認してください。
送信先が安全か自信が持てないときはどうすればよいですか
心当たりのないドメインへの送信は、いったん止める前提で扱うのが安全です。公開時にスキャンで外部送信などの兆候を警告してくれるサービスを使うと、見落としに気づきやすくなります。
noindexを設定すれば認証は不要ですか?
不要ではありません。noindexは検索結果への表示を抑えるための指定で、URLを知っている人の閲覧を止める仕組みではありません。閲覧者を制限したい場合は認証が必要です。
フォームが本当に動くか分からないページは、共有してもよいですか?
UI確認だけが目的なら共有できますが、送信しない前提を明記してください。送信先が未確認のフォームに個人情報や問い合わせ内容を入力させると、意図しない外部送信やデータ消失の原因になります。