秘密のAPIキーをブラウザに配ってしまう
Next.js の NEXT_PUBLIC_、Vite の VITE_ で始まる環境変数は、ビルド時に JS へ値ごと埋め込まれます。OpenAI や Stripe のキーをここに入れると、誰でも読めます。
個人開発・AIで作ったアプリの公開前チェックに
SSL証明書、セキュリティヘッダー、Cookie、メールのなりすまし対策、公開JSに含まれるAPIキーの漏えいを、まとめて1〜2秒で確認します。見つかった問題は、Next.js・Vercel 向けの直し方と、AIエージェントに渡せる修正依頼で返します。
$ 診断対象 your-app.vercel.app
表示例
要対応の項目が3件あります
外から見える設定のうち、個人開発のサイトで見落とされやすく、被害につながりやすいものを選んでいます。
ブラウザに届く JS に、秘密の APIキーが含まれていないかを、提供元ごとの形式で検索します。
HTTPS で開けるか、証明書が有効で期限に余裕があるか、古い TLS を使っていないかを確認します。
http から https へ転送されるか、ブラウザに HTTPS を強制させる HSTS があるかを確認します。
クリックジャッキングや XSS の被害を抑えるレスポンスヘッダーが設定されているかを確認します。
トップページで設定される Cookie に、盗まれにくくする属性が付いているかを確認します。
あなたのドメインを名乗るなりすましメールを、受信側が見分けられる設定かを確認します。
ドメインかURLを入れて「診断する」を押します。初回だけ無料のアカウント登録が必要です。
接続・証明書・ヘッダー・公開JS・DNS などを同時に確認し、終わった工程から結果が流れます。多くのサイトは1〜2秒で終わります。
項目ごとの設定例をコピーするか、すべての問題をまとめた修正依頼を Claude Code や Codex に貼り付けます。
AIに書かせたコードは動くことを優先するため、鍵の置き場所やデータの守り方が後回しになりがちです。
Next.js の NEXT_PUBLIC_、Vite の VITE_ で始まる環境変数は、ビルド時に JS へ値ごと埋め込まれます。OpenAI や Stripe のキーをここに入れると、誰でも読めます。
Supabase の anon キーは公開前提の値です。データを守るのは RLS(行単位のアクセス制御)だけなので、無効なテーブルは誰でも読み書きできます。service_role キーが漏れると、RLS もすべて素通りされます。
Supabase の RLS を確認する方法入力されたドメインの持ち主でなくても診断できるため、確認はブラウザで開くのと同じ範囲の公開情報に限っています。
User-Agent: ideavaluSecurityCheck/1.0 (+https://ideavalu.com/security-check)
無料のセキュリティ診断は、確認する範囲と対象にしている人がツールごとに違います。目的に合わせて使い分けてください。
| 確認する範囲 | 公開JSの秘密鍵 | 直し方 | 向いている人 | |
|---|---|---|---|---|
| IDEAVALU の診断 | SSL・ヘッダー・Cookie・SPF/DMARC・公開JS | 確認する | Next.js・Vercel 向けの設定例と、AIエージェント用の修正依頼 | 個人開発・AIで作ったアプリ |
| 一般的な外形チェック | SSL・ヘッダーなど、ツールごとに一部 | 確認しないものが多い | 一般的な説明が中心 | 企業サイト・CMS の運営者 |
| 脆弱性診断ツール(ZAP など) | 入力欄・ログインなどアプリケーションの弱点 | 対象外 | 自分で調べる | 検証環境を持つ開発者(持ち主の許可が必要) |
| 専門会社の有償診断 | 手作業を含む詳細な検査 | 依頼内容による | 報告書で提示 | 決済・個人情報を扱う本番サービス |
ツールごとの詳しい比較は、無料で使えるセキュリティ診断・脆弱性診断ツールまとめにまとめています。
診断の各項目について、何が危ないのか、自分で確認するコマンド、Next.js・Vercel などでの直し方をまとめています。
この診断は、ブラウザでトップページを開くのと同じ範囲の公開情報(レスポンスヘッダー、HTML、読み込まれるJS、公開DNS)だけを確認します。ポートスキャンや脆弱性を突く試行、ログイン試行は行いません。見つかった秘密情報の場所は、ドメインの所有確認をした本人にだけ表示します。
他人のサイトへの大量の診断を防ぐためです。登録は無料で、Google アカウントならすぐに終わります。登録すると、直し方、AIエージェント用の修正依頼、診断の履歴も使えます。
7つの工程を並列に確認するため、多くのサイトは1〜2秒、遅いサーバーでも十数秒で終わります。同じドメインの結果は24時間保存し、その間は保存した結果をすぐに表示します。
この診断は、外から誰でも見られる情報だけを使う「外形チェック」です。脆弱性診断は、攻撃に近いリクエストを実際に送って SQLインジェクションや XSS などアプリケーションの弱点を調べる検査で、サイトの持ち主の許可が必要です。必要に応じて、ZAP などの脆弱性診断ツールや専門会社の診断と組み合わせてください。
ドメインに関する項目として、メールのなりすまし対策(SPF・DMARC)、証明書の発行元の制限(CAA)、SSL証明書の有効性と期限を確認します。DKIM・DNSSEC・MTA-STS は確認していません。
anon キー(publishable キー)はブラウザに置く前提の値なので、この診断では問題として扱いません。その代わり、RLS(行単位のアクセス制御)で他人のデータを読めないようにしておく必要があります。service_role キーやシークレットキーがブラウザに届いている場合は、すぐに無効化してください。
外から見える設定の確認なので、合格でも安全を保証するものではありません。ログインや決済の作り、データベースのアクセス制御、依存パッケージの脆弱性などは別に確認してください。
診断結果を公開するページはありません。秘密情報そのものは保存せず、先頭と末尾だけを残した文字列を保存します。
診断のアクセスは User-Agent に「ideavaluSecurityCheck/1.0 (+https://ideavalu.com/security-check)」と名乗ります。対象から外したい場合は、お問い合わせからドメインをお知らせください。
診断についてのお問い合わせはお問い合わせから受け付けています。