What Ships・セキュリティ
Vibeコーディングのセキュリティ:公開済みのAIサイトからどのような情報が漏洩しているか、そして外部からそれを確認する方法.
AIが作ったサイトを公開した、あるいは引き継いだ場合、そのサイトがどんな情報を公開しているのか気になるはずです。このページでは、起きている問題、サイトが送るべきヘッダーセット、修正の順序を説明します。公開ページを見ても、確認できるのは訪問者のブラウザに表示される内容だけです。データベースのルールやログイン情報、分析データは確認できません。これらは「玄関」の内側で保護されています。

このページの内容 11つのセクション
- 00主なポイント
- 01バイブコーディングは安全ですか?
- 02AIで構築されたサイトでは、どのようなセキュリティ上のミスが最も頻繁に発生するのでしょうか?
- 03公開情報からの読み取りで、サイトのセキュリティについて何がわかるのでしょうか?
- 04AIで構築されたサイトは、どのようなヘッダーを送信すべきでしょうか?
- 05露出したキー、公開されたエンドポイント、初期設定のままの構成は、どのように現れるのでしょうか?
- 06バイブコーディングで作ったサイトでは、まず何を修正すべきでしょうか?
- 07サイトのセキュリティの柱を無料で確認するにはどうすればよいでしょうか?
- 08よくある質問
- 09自分のサイトを確認する
- 10著者について
主なポイント.
- JavaScript 内に Supabase の公開用キーがあるのは普通のことです。ただし、すべてのテーブルで「行レベルセキュリティ」が有効になっていないと、誰でも完全なアクセス権限を得られてしまいます。
- まず、バンドル内の sb_secret_ または service_role キーをすべてローテーションし、次に RLS を有効にし、その後ヘッダーを追加して、最後にコードを確認してください。
- Tenzaiの調査では、AIで構築された15のアプリケーションのうち、セキュリティヘッダーを設定していたものは1つもありませんでした。今日中に、ご自身のレスポンスヘッダーを確認してください。
- パブリックリードで見えるのは、ブラウザが受け取る内容です。RLSポリシー、ログイン情報、分析データなどは見えないので、それらはバックエンドで確認してください。
バイブコーディングは安全ですか?
いいえ、Vibeで生成されたサイトが安全だと決めつけてはいけません。調査によると、AIが生成したコードには、悪用可能な欠陥が頻繁に含まれていることがわかっています。まず開発者ツールを開き、レスポンスヘッダーを確認してみてください。セキュリティヘッダーは表示されていますか? Tenzaiの調査では、Cursor、Claude Code、Replit、Devin、OpenAI Codex上で構築された15のアプリケーションを検証しましたが、セキュリティヘッダーを設定していたものは一つもありませんでした。たった一つもです。(はい、ブラウザ上では洗練されているように見えたものでさえもです。)ですから、ご自身のサイトも確認してください。
モデルだけでは安心できません。IOActiveの調査によると、すべてのモデルにおける平均的なセキュリティ性能は59%であり、100%安全な出力を生成するモデルは一つもありませんでした。しかも、新しいモデルであっても例外ではありません。 2025年12月にカーネギーメロン大学、コロンビア大学、ジョンズ・ホプキンス大学が実施した研究によると、主要なモデルにプロンプトを与えた場合、機能的に正しいコードが得られる確率は61%にとどまります。得られたコードのうち、正しくかつ安全なものはわずか10%に過ぎません。 ジョージア工科大学の「Vibe Security Radar」によると、2026年3月にはAI生成コードが直接原因となった新たなCVE登録件数が35件に上り、1月の6件から増加しました。一時的な現象ではなく、はっきりとした増加傾向です。次回のデプロイの前に、コミット内容を必ず確認してください。修正するのは、あなた自身です。
公開したものはすべてご自身の責任となります。ツールだけではサイトの安全性を保証できません。コードを見直し、ページをテストし、見つかった問題を修正すれば、サイトは安定して稼働します。しかし、コードをそのまま受け入れてしまうと、あなたを含め、誰もそれをチェックしていないことになります。 あなたのレビューこそが、コードに対する唯一のチェックです。ですから、URLを入力して無料の診断を実行してください。ヘッダーを確認し、まずはそれらを修正してください。
AIで構築されたサイトでは、どのようなセキュリティ上のミスが最も頻繁に発生しているのでしょうか?
最も頻繁に見られる問題は3つあります。ブラウザ内に保存された秘密情報、アクセスルールが欠如しているために開放されたままになっているデータベース、そしてセキュリティヘッダーの欠落です。ソースコードやバンドル内で「sb_secret_」または「service_role」を検索してください。いずれかが見つかった場合、バックエンド専用の鍵をすべての訪問者に公開してしまったことになります。 Escape.techは、貴社のアプリケーションと同様のvibeコーディングされたアプリケーション5,600件を調査し、2,000件以上の脆弱性、400件以上の漏洩した機密情報、および175件の個人識別情報(PII)の漏洩を確認しました。ですから、vibeコーディングを行っているなら、貴社のバンドルにも同じ問題が潜んでいるかもしれません。ぜひご自身の環境を確認してください。
Supabaseをご利用の場合は、ご自身の環境をご確認ください。VibeAppScannerの報告によると、スキャン対象のアプリ全体において、Supabaseが重大な問題の最大の原因となっており、そのほとんどは行レベルセキュリティ(RLS)が有効になっていなかったことが原因でした。テーブルでは、この設定を有効にする必要があります。 モバイルアプリをリリースする予定ですか? そのときは、ルールについても同様の検証が必要です。Barrack AIの分析によると、2026年1月15日に発生したインシデントは、Firebaseのルールに「allow read: if true」と記述されていたことが原因とされています。また、196のiOS AIアプリを対象とした調査では、98.9%のケースでFirebaseの設定ミスが原因であると指摘されています。 ルール内でその行を検索してください(1行だけなので、見落としやすいものです)。もし見つかった場合は、まずそれを修正してください。
ログイン機能と制限事項を検証してください。IOActiveの調査によると、ほぼすべてのモデルにおいて、認証、レート制限、暗号化に不備が見られました。しかも、Tenzaiの調査対象となったすべてのツールで、この種のツールにありがちな「サーバーサイドリクエストフォージェリー(SSRF)」の脆弱性が確認されました。つまり、どのツールを使ったかは関係ありません。ご自身のアプリにこの脆弱性がないか確認してください。
公開情報からの読み取りで、サイトのセキュリティについて何がわかるのでしょうか?
公開された読み取り情報には、サイトが各訪問者のブラウザに送信している内容(レスポンスヘッダー、マークアップ、スクリプト、およびどのURLが応答しているか)が表示されます。ホームページを開いて「ネットワーク」タブを確認すると、OWASPがリストアップしているヘッダーのうち、どのヘッダーがサイトから送信されているかがわかります。 「Server」や「X-Powered-By」ヘッダーに、お使いのスタック名が記載されていませんか? サイトを調べる側にとっては、無料のヒントです。しかも、頼まれてもいないのに、サイトのほうから自ら明かしていることになります。
また、JavaScript 内に Supabase プロジェクトの URL やキーが含まれている場合もあります。ただ、それだけでビルドの失敗とは限りません。Wiz によると、それ自体が自動的にセキュリティ上の問題を示すわけではないとのことです。危険性は、そのキーの背後にあるバックエンドの設定方法にあります。 そのため、そのキーでどこにアクセスできるかを確認してください。Stingraiによると、公開されたURLとキーは自動生成されたREST APIにアクセスできるので、ご自身のバンドル内で両方を確認してください。キーは玄関の呼び鈴のようなものです。誰が中に入れるかは、バックエンドの設定によって決まります。
公開読み取りでは、行レベルセキュリティが有効かどうか、ポリシーの内容、サイトにログインできるユーザー、分析データの内容、あるいはサーバーコードが入力をどのように処理しているかなどは確認できません。 何か気になる点がありましたか? データベースの設定をご確認ください。これはあくまでヒントであり、断定的な結論ではありません。この評価では公開ページのみを読み取り、ログインは行いません。ですから、非公開の設定はご自身で確認していただく必要があります。
AIで構築されたサイトは、どのヘッダーを送信すべきでしょうか?
サイトでは、「Strict-Transport-Security」、「Content-Security-Policy」、「X-Content-Type-Options」、「Referrer-Policy」、「Permissions-Policy」に加え、ご自身で選択したフレーム制御を送信する必要があります。3つのクロスオリジンポリシーは、オプションの追加機能です。 ホームページのレスポンスヘッダーを確認し、見つかったヘッダー名をすべてチェックしてください。OWASPによると、適切なレスポンスヘッダーは、ページ上のクロスサイトスクリプティング、クリックジャッキング、情報漏洩の防止に役立ちます。また、不足しているヘッダー名一つひとつがセキュリティ上の穴となります(ヘッダーが欠けていても機能に支障をきたさないため、目立たない穴ではありますが)。 Tenzaiの調査によると、AIで構築された15のアプリケーションのうち、これらのヘッダーを設定していたものは1つもありませんでした。ですから、AIを使用してアプリケーションを構築された場合は、必ず確認してください。ヘッダーの追加にコストはかかりません。しかし、ヘッダーが欠けていると、多大な損失を被る可能性があります。
CSPはメタタグではなく、HTTPヘッダーとして送信してください。OWASPによると、ヘッダーはすべてのレスポンスをカバーし、全機能をサポートしているのに対し、メタタグではフレーム化対策、サンドボックス化、違反のログ記録を行うことができません。そして、ヘッダーに「frame-ancestors」を指定してください。MDNによると、これにより「X-Frame-Options」よりも多くのオプションが利用可能になります。 レスポンスにまだ X-Content-Security-Policy や X-WebKit-CSP が表示されていますか? どちらも削除してください。これらは非推奨となっており、残しておく意味はありません。
X-Content-Type-Options を nosniff に設定してください。そうすることで、セキュリティテスターがサイトに期待するように、訪問者のブラウザが宣言された Content-Type を正しく認識するようになります。そして、Strict-Transport-Security には、秒単位の max-age が必要です。 プリロードをご希望ですか? 少なくとも1年間の設定と「includeSubDomains」が必要です。まずは現在の値をご確認ください。ただし、ドメイン上で安易に有効化しないでください(プリロードの設定を元に戻すのは困難です)。ヘッダーを変更する前に、要件をよくお読みください。
露出したキー、公開されたエンドポイント、初期設定のままの構成は、どのように現れるのでしょうか?
これらは、JavaScript 内のデータベースキー、ログインなしで応答するサイトの REST パス、および一度も変更したことのないデフォルト設定として確認できます。 キーのプレフィックスをご確認ください。「sb_publishable_」キーは権限レベルが低いため、RLSを有効にした状態でも公開可能です。ただし、「sb_secret_」キーはバックエンド専用であり、RLSをバイパスします。なお、従来の「anon」および「service_role」キーは、この2種類に対応しています。
Moltbookは、どのようなリスクがあるかを示しています。同サービスのSupabaseキーは、RLSポリシーが設定されていないクライアントサイドのJavaScript内に放置されていました。リリースから3日以内に、Wizは150万件のAPI認証トークン、3万5,000件のメールアドレス、および非公開メッセージが漏洩していることを発見しました。RLSがなければ、そのキーによって誰でもデータベースに完全にアクセスできてしまい、皆様のケースでも同様の事態になりかねません。 あなたのキーも同様に公開されている可能性があります。したがって、被害の程度は設定したポリシー次第です。バンドルを検索し、ポリシー内容を確認してください。
デフォルト設定も重要ですので、ご自身の設定をご確認ください。Supabaseのドキュメントによると、既存のプロジェクトで「public」に作成されたテーブルには、匿名ユーザー、認証済みユーザー、およびservice_roleに対してSELECT、INSERT、UPDATE、DELETEの権限が付与されます。ただし、プラットフォームのデフォルト設定は変更されつつあります。 ポリシー内で「to anon using ( true )」という記述を検索してください。これが見つかった場合、認証されていないすべての訪問者がそのテーブルを読み取ることができます。この脆弱性は、これがすべてです。
バイブコーディングで作ったサイトでは、まず何を修正すべきでしょうか?
まず、公開されているバックエンドのシークレットを修正し、次にデータベースへのアクセスルールを、その次にヘッダーを、最後にコードレビューが必要なロジックの欠陥を直してください。バンドル内で「sb_secret_」と「service_role」を検索し、どちらかが見つかったら、すぐにそのキーをローテーションしてください。Stingraiも、公開された「service_role」キーにはこの対応を推奨しています。シークレットキーはバックエンドだけに置いてください。漏洩したキーは、置き換えるまで漏洩したままです。コードからその行を消しても、置き換えたことにはなりません。
次に、Supabaseのドキュメントに従い、公開スキーマ内のすべてのテーブルでRLSを有効にしてください。「to anon using ( true )」と書かれたポリシーは一つずつ確認し、意図して公開しているものかどうかを見極めてください。三つ目に、前のセクションで説明したヘッダーを追加します。ヘッダーは脆弱性そのものを塞ぐのではなく、被害を抑えるためのものです。そのため、データ処理の後に回します。
最後に、コード内の認証、レート制限、CSRF対策、サーバーサイドリクエストフォージェリー(SSRF)への対応を確認してください。IOActiveの調査では、「安全なコードを書いてください」といった注意書きは、効果がないか、かえって逆効果になることが多いと分かりました。ツールにもう一度注意を促すより、ご自身でコードを読み直してください。
サイトのセキュリティの柱を無料で確認するにはどうすればよいでしょうか?
無料診断にサイトのアドレスを入力すると、約2分で100点満点のスコアが表示されます。セキュリティを含む8つの評価項目それぞれについて、具体的な根拠も確認できます。診断には職場のメールアドレスの入力が必要で、レポートへのリンクが1回だけ送られます。1回の接続につき、1時間に3回まで診断できます。
セキュリティはスコアの12%を占め、レポートにもその内容が反映されます。評価では、ホームページに加えて最大8ページのサンプルページを分析し、レスポンスヘッダー、マークアップ、スクリプトを確認します。つまり、セキュリティの評価は、これらのページがブラウザに送る内容に基づいています。レポートを上記のヘッダー一覧と照らし合わせると、サイトに足りない項目が分かります。その不足を補うのが、最も手早く成果の出る対策です。
総合スコアは次の区分に分かれます。80~100は「良好」、60~79は「制約あり」、40~59は「リスクあり」、0~39は「レガシー状態」です。この評価では、サイトへのログイン、アナリティクスの閲覧、現場のパフォーマンスデータの取得、インタビューは行いません。データベースが公開されているかどうかを知りたい場合は、ご自身のバックエンド設定を確認してください。答えはそこにしかありません。
よくある質問.
01JavaScript 内の Supabase キーは情報漏洩にあたるのでしょうか?
それだけでは言い切れません。Wiz氏によると、クライアントコード内にSupabaseの認証情報が見つかっても、必ずしもセキュリティ上の問題とは限りません。Supabaseは、特定のキーが公開された状態で動作するように設計されているためです。「publishable」または「anon」キーを使う場合は、すべてのテーブルに「Row Level Security」を設定する必要があります。一方、バンドル内に「secret」や「service_role」キーがあれば、それは常に情報漏洩につながります。
02この診断で、私のデータベースが公開されているかどうかを確認できますか?
いいえ。この評価が読み取るのは公開ページ(ヘッダー、マークアップ、スクリプト、構造化データ)です。行レベルセキュリティ(RLS)ポリシーが有効かどうかは確認できません。その設定はバックエンド側にあるためです。公開ページを読むと、JavaScript内のキーが見つかる場合があります。ただしそれは、どこを確認すべきかを示すもので、何が見つかるかを示すものではありません。
03セキュリティに関するプロンプトを追加すれば、AIが生成するコードは安全になるのでしょうか?
そうとは限りません。IOActiveの調査では、「安全なコードを書いてください」といった単純な指示は、効果がないか、かえって逆効果になることが多く、100%安全な出力を生成できたモデルは一つもありませんでした。認証、レート制限、暗号化は、ほぼすべてのモデルに不備がありました。生成されたコードは必ず確認し、そのうえで、サイトがブラウザに送っている内容も確認してください。
04本当のリスクがデータベースにある場合でも、セキュリティヘッダーは重要ですか?
はい、ですが優先度は二番目です。まずデータベースのルールを直してください。Moltbookのセキュリティ上の脆弱性の原因は、ヘッダーの欠如ではなく、行レベルセキュリティ(RLS)が実装されていなかったことです。ヘッダーは、クロスサイトスクリプティング、クリックジャッキング、情報漏洩の防止に役立ちます。Tenzaiの調査では、AIで構築された15のアプリのうち、ヘッダーを設定していたものは1つもありませんでした。次はヘッダーを追加してください。安価な保険のようなものですが、最優先で対応することではありません。
出典
このページの事実は以下の資料に基づいています。確認日: 2026-10-25。診断そのものに関する数値は、その仕組みを説明するものです。
- Vibe Coding Security Risks: What Founders Need to Know (2026) - Modall
- Is Supabase Safe? RLS, anon vs service_role & CVE-2025-48757
- Supabase Anon Key: Is It Safe to Expose? RLS and 2026 Keys
- Hacking Moltbook: AI Social Network Reveals 1.5M API Keys | Wiz Blog
- Every AI App Data Breach Since January 2025: 20 Incidents, Same Root Causes | Barrack AI
- Vibe Coding Security: Why 62% of AI-Generated Code Is vulnerable
- What Is AI Code Security? Risks in AI-Generated Code | Superblocks
- The Security Gap in AI-Generated Code - IOActive
2分後には
