セキュリティ

顧客名の露出を防ぐAIプロンプトと公開前スキャン

提案資料や商談メモをもとにAIでHTMLを作成すると、出力に顧客名が残ることがあります。プロンプトに制約を設けてもAIが無視するケースや、入力資料から顧客名が引き継がれるケースが実際に起きています。プロンプト設計の改善と公開前スキャンを組み合わせることで、顧客名の露出を二重に防ぐ方法を解説します。

なぜ危ないのか

AIへのプロンプトに「A商事向けの提案書HTMLを作って」と指示した場合、AIは「A商事」という名称をHTMLのテキスト・タイトル・コメントに自然に埋め込みます。これは期待通りの挙動ですが、その後に別の顧客Bへの共有用にHTMLを使い回す場面で、顧客A商事の名前が残ったまま送付されてしまう事故につながります。

AIが生成したHTMLには、指示に含めた顧客名だけでなく、過去の会話コンテキストに残っていた別の顧客名が混入することもあります。長いチャットセッションでAIを使い続けると、前のプロンプトで使った顧客名をAIが引き継いで別の生成物に含めることがあります。セッションを跨いで別の顧客のHTMLを生成する際は、新しいチャットを開始することを推奨します。

  • 相手がログインなしで開ける状態か確認する
  • PCとスマホで最低1回ずつ表示を確認する
  • 内部情報・個人情報・不要な外部送信が残っていないか見る
  • レビュー期限と修正時の差し替え方を決めておく

ソースで見る場所

生成されたHTMLを受け取ったらまず`<title>`タグと`<h1>`タグを確認してください。提案書や報告書をHTML化した場合、これらのタグに顧客名が入っている可能性が最も高いです。次に`<meta name="description">`のcontent属性、そしてHTMLコメントの順で確認します。

JavaScriptコード内の文字列にも顧客名が含まれることがあります。「顧客名に応じて動的にコンテンツを変更する」ような処理をAIが生成した場合、`const customerName = 'A商事';`のような定数定義がスクリプト内に残ります。`grep -n '顧客名\|A商事' output.html`のように具体的な顧客名を検索パターンに含めてください。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

安全に共有する設定

スキャンをパスしたHTMLは、顧客ごとに個別のアクセス制限付きURLで共有してください。ギガサイト便では1ファイルをアップロードした後、閲覧可能なメールアドレスを絞って複数のURLを発行できます。顧客Aには顧客Aのドメインのみアクセスできるリンクを渡し、同じHTMLを顧客Bに再利用する際は顧客名を置換した新バージョンで新たなURLを発行します。

顧客へのリンク送付は、直接メール本文にURLを貼るのではなく、BacklogやSalesforceなどの案件管理ツール経由で送ると履歴が残り管理しやすくなります。「誰に何を送ったか」の記録が案件ツールに残ることで、後から誤送信のトレースも可能になります。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

再発防止ルール

AIへのプロンプトを「顧客名をプレースホルダーで記載し、実際の顧客名は[CUSTOMER_NAME]と書くこと。HTMLの出力にも同じプレースホルダーを使うこと」という指示に変更してください。プレースホルダー形式で生成させることで、HTMLをテンプレートとして複数顧客に使い回せます。

新しい顧客のHTMLを生成するたびに新しいAIチャットセッションを開始するルールをチームで共有してください。古いセッションには前の顧客の文脈が残っているため、誤った顧客名が混入するリスクが高まります。セッション管理の手間を省くために、プロンプトテンプレートをテキストファイルで管理し、毎回コピーペーストする方式が運用しやすいです。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

よくある質問

AIへのプロンプトで顧客名の使用を禁止した場合、提案書の内容が伝わらなくなりませんか?

顧客名をプレースホルダーにすることで、提案内容や構成は同じまま作成できます。生成後に顧客名を置換すれば完成品は同じです。むしろプレースホルダー方式の方がテンプレート化できるため、複数顧客へ展開する際の工数が下がります。

AIが顧客名のプレースホルダーを勝手に「サンプル株式会社」などに変換してしまうことはありますか?

プロンプトで`[CUSTOMER_NAME]`という形式を指定しても、AIが独自判断で別の名前に変換することがあります。生成後のスキャンで元の指定通りのプレースホルダーが残っているかを確認し、変換されていた場合は手動で修正してください。

長期商談で複数回HTML修正を繰り返す場合、毎回スキャンすべきですか?

修正のたびにスキャンを実施することを推奨します。AIによる修正では意図しない箇所が変更されることがあり、前回はなかった顧客名が再度追加されることがあります。修正前後でdiffを取り、変更箇所だけを集中確認する方法も効率的です。

関連記事

セキュリティ

APIキー直書きを防ぐAIプロンプトと公開前スキャン

AI生成HTMLへのAPIキー直書きをプロンプト設計で防ぎ、公開前スキャンで二重検出したい開発者・制作担当者向け。具体的なプロンプト文言とgrepコマンドをセットで紹介します。

4分で読める
「セキュリティ」の記事をもっと見る →