Communitygithub.com

launch-audit

Webアプリやモバイルアプリのローンチ前監査を実施し、セキュリティ強化、法務/プライバシーコンプライアンス、アクセシビリティをチェックします。アプリやウェブサイトのリリース、デプロイ、公開前の安全性確認や、セキュリティ監査、GDPR/クッキー/プライバシーチェック、ハッキングや訴訟リスクの回避を求めるユーザーに最適です。

launch-audit とは?

Launch Auditは、アプリケーションが「ハッキング」や「訴訟」のリスクにさらされないようにするための包括的なプレローンチ監査スキルです。セキュリティ、法務/プライバシーコンプライアンス、アクセシビリティの3つの主要領域をカバーし、4つのリファレンスファイル(prelaunch-checklist.md、security.md、legal-compliance.md、stack-notes.md)に基づいて監査を実行します。対応スタックはSupabase、Firebase、Next.js、Express、Django、Rails、Laravel、モバイル、Stripe、LLMアプリなど多岐にわたります。ワークフローは、自動スコープ特定、ユーザーへの質問、Pythonスクリプトによる自動スキャン、手動コードレビュー、結果の分類、レポート生成、修正提案の順で進みます。各チェック項目にはID(SEC-*、LEG-*、A11Y-*)が付与され、報告書での追跡が可能です。発見された問題は重要度に応じて「Critical」「High」「Medium」「Low」に分類され、検出されたシークレットは最初の4文字のみを表示しマスクされます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DiogoT2/launch-audit/tree/HEAD/skills/launch-audit

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Launch Audit

アプリがハッキングや訴訟に遭わないように監査します。作業は4つのリファレンスファイルに分割されています。目の前のスタックに該当するファイル(およびセクション)のみをお読みください。

ファイル用途
references/prelaunch-checklist.md20項目のGo/No-Goゲート。まずはここから。
references/security.md完全なセキュリティレビュー: シークレット、認証、アクセス制御、インジェクション、ブラウザ/トランスポート、サプライチェーン、AI機能、運用。
references/legal-compliance.mdポリシー、同意、プライバシー権、誠実なマーケティング、子ども、メール、知的財産、アクセシビリティ。
references/stack-notes.mdプラットフォーム固有の落とし穴: Supabase、Firebase、Next.js、Express、Django、Rails、Laravel、モバイル、Stripe、LLMアプリ。

すべてのチェックリスト項目にはID(SEC-*、LEG-*、A11Y-*)が付いています。レポートではこれらのIDを使用して、発見事項を追跡可能にしてください。

モードを選択

  • Quick(「ローンチチェックリスト」「リリース準備はできている?」時間がない場合)→ prelaunch-checklist.md のみ。
  • Security(「セキュリティ監査」「ハッキングを避けたい」「これは安全か?」)→ security.md + 該当する stack-notes.md のセクション。
  • Legal(「訴訟を避けたい」「GDPR」「クッキーバナー」「プライバシーポリシー」)→ legal-compliance.md。
  • Full(ユーザーがリリース前に単に「アプリを監査して」と言った場合のデフォルト)→ 上記すべて。

ワークフロー

1. スコープ — ほぼ自動

リポジトリから以下を事前に確認し、質問は最小限に:

  • スタック: フレームワーク、言語、バックエンド/BaaS(Supabase、Firebase、自前サーバー)、DB、認証プロバイダー、ホスティング、Web vs モバイル vs 両方。package.json、ロックファイル、requirements.txt/pyproject.toml、Gemfile、composer.json、pubspec.yaml、supabase/、firebase.json、vercel.json、Dockerfile、CIファイルを確認。
  • データインベントリ: 収集される個人データ(フォーム、サインアップフィールド、アナリティクス)、保存場所、受信するサードパーティSDK/サービス(アナリティクス、広告、クラッシュレポート、決済、メール、AI API)。
  • お金: 決済、サブスクリプション、トライアル、アプリ内課金。
  • 表面: 公開ページ、APIルート、サーバーアクション、エッジ/クラウド関数、Webhook、管理画面、ファイルアップロード、AI/LLM機能。

その後、1回のメッセージで、コードからはわからないことだけをユーザーに尋ねます: ターゲット市場(EU/UK/US/ブラジル/その他)、未成年者が使用する可能性があるか、ライブまたはステージングURL(ある場合)、修正を適用するかレポートのみかを確認。

ユーザーが応答できない場合、EU + US、成人のみ、レポート優先と仮定し、その旨をレポートの先頭に明記します。

2. 自動パス

python3 scripts/scan.py <repo-path>              # ワーキングツリー
python3 scripts/scan.py <repo-path> --history    # git履歴もシークレットスキャン
python3 scripts/check_live.py https://staging.example.com   # ライブヘッダー、クッキー、CORS、公開ファイル

両スクリプトともPython 3標準ライブラリのみで動作します。check_live.pyは無害なGETリクエストをいくつか送信します — ユーザーが所有するか、テストを許可されたサイトに対してのみ実行してください。

また、エコシステムの依存関係監査ツール(npm audit、pnpm audit、pip-audit、osv-scanner、bundle audit、composer audit、cargo audit)が利用可能な場合は実行します。scan.pyは検出したマニフェストに応じて適切なコマンドを表示します。

スクリプトの出力は手がかりであり、確定判定ではありません。各ヒットはコードを読んで確認し、誤検知は除外してください。スキャンがクリーンでも安全とは限りません。最も被害が大きいバグ(壊れたアクセス制御、欠落したサーバーサイドチェック、テナントリーク)は、コードを読んで初めて見つかるロジックバグです。

3. 手動レビュー

以下の順序で読み進めます:

  1. 認証設定とミドルウェア。サーバーが呼び出し元をどのように識別するか。
  2. すべての APIルート、サーバーアクション、エッジ/クラウド関数、Webhookハンドラー。
  3. データベースアクセスルール: RLSポリシー、Firebaseルール、ORMスコープ、DBユーザー権限。
  4. 入力からSQL、シェルコマンド、HTML、ファイルパス、URLを構築するものすべて。
  5. ファイルアップロードおよびダウンロードハンドラー。
  6. AI/LLM機能: 信頼できないテキストがモデルに到達するか、モデルが呼び出せるツール。
  7. 法務ページ、クッキーバナー、サインアップおよびチェックアウトフロー、マーケティングコピー、メール。

すべてのエンドポイントについて、4つの質問に答えます: 誰が呼び出しているか?サーバーで確認されているか?レコードはその人(またはそのテナント)のものか?どのフィールドを書き込めるか? 「いいえ」または「わからない」は発見事項です。

4. 分類

各項目のステータス: FAIL · WARN · PASS · MANUAL(人間の判断が必要: 法的テキストレビュー、復元訓練、弁護士) · N/A。 実際に確認していない項目にPASSを付けないでください — 代わりにMANUALを使用してください。

障害の深刻度:

  • Critical — 現在悪用可能、またはすでに露出しているもの: リポジトリ/バンドル/履歴内のライブシークレット、認証なしで読み書き可能なデータベース、ユーザーデータを含むテーブルでRLSが無効、認証バイパス、個人データのIDOR、SQL/コマンドインジェクション、RCE。
  • High — 小さな前提条件で深刻: ログイン/リセットのレート制限欠如、保存型XSS、Webhook署名チェック欠如、弱いパスワードハッシュ、認証情報付きの過剰なCORS、本番環境でのデバッグモード、バックアップなし。法的: 表明された市場に対して必須要件が欠如(個人データを収集しているのにプライバシーポリシーがない、EU/UKで同意前に非必須トラッキング、アプリストアアプリでアカウント削除機能なし)。
  • Medium — 多層防御のギャップ: セキュリティヘッダー欠如、詳細なエラー、監査ログなし、古いが悪用不可の依存関係。法的: 不完全なポリシー内容、同意UXの問題、アクセシビリティ不備。
  • Low — 衛生と洗練。

5. レポート

templates/report.mdに記入。評決を先頭に記載:

  • 🔴 準備未完了 — Critical、または個人データやお金に触れるHigh項目がある場合。
  • 🟡 修正すれば準備完了 — High/Mediumがあり、今週中の修正計画がある場合。
  • 🟢 準備完了 — Critical/Highなし。Mediumは追跡中。

各発見事項: ID、深刻度、証拠(file:lineまたはURL + ヘッダー)、リスクの1行説明、具体的な修正方法(短いコードならコードも)。深刻度ごとにグループ化し、チェックリストの順序には従わない。PASS項目はコンパクトな表にまとめる。

レポートやチャットに完全なシークレットを貼り付けないでください。 最初の4文字を表示し、残りはマスクします(sk_l****)。

6. 修正

深刻度順に修正を提案。ユーザーが修正を依頼した場合、または同意した場合のみコードを編集。修正後、scan.py(およびデプロイ後はcheck_live.py)を再実行し、レポートを更新。

漏洩したシークレットは、常にこの順序で対応: プロバイダーでキーを失効/ローテーション → コードから削除してサーバーサイド環境変数に移動 → git履歴から削除(git filter-repoまたはBFG)し、force-push。削除だけでは無意味: キーはすでにクローン、フォーク、CIログ、キャッシュに存在します。

基本ルール

  • 法的助言ではありません。 プライバシーポリシー、利用規約、クッキーポリシー、返金ポリシーのドラフトは作成できますが、ドラフトはアプリが実際に行っていること(ステップ1〜3で見つけたデータ、SDK、処理者)を説明するものでなければならず、他社からコピーしてはならず、対象市場の弁護士によるレビューを促すフラグを立てる必要があります。
  • 防御のみ。 ユーザーが所有するか、テストを許可されたシステムのみテスト。脆弱性と修正を説明し、第三者に対する実用的なエクスプロイトを構築しない。
  • コードベースなし、URLのみ? check_live.pyを実行し、サイトを調査(フッターの法的リンク、同意前にトラッカーが起動するか、「拒否」が「同意」と同じくらい簡単か、フォームとチェックアウト)。コードレベルの項目はMANUALとマーク。
  • モバイルアプリ: アプリバイナリに出荷されたものはすべて公開されています。モバイルアプリ内のシークレットは漏洩したシークレットです。
  • 手作りの修正よりもプラットフォームネイティブの修正(RLSポリシー、フレームワークミドルウェア、プロバイダー設定)を優先。

関連スキル