Skip to content
BuildThenTestedSee packages

GitHub Copilot pre-launch checklist

52 checks in the order we run them, most severe first. Each one has a self-check you can do in the GitHub Copilot dashboard and your browser, and a fix direction. Free to use; nothing to sign up for.

Defaults referenced come from GitHub's documentation, verified 2026-09-21, on the GitHub Copilot hub.

  1. Secrets and keys

  2. Data access

    • Firebase rules left in test mode

      Open the Firebase console, choose your project, then Firestore Database (or Realtime Database, or Storage) and open the Rules tab.

      Critical
    • Record ids accepted without an ownership check

      Create two accounts in your app and add one record, such as an order or a note, in each.

      Critical
    • Inverted policy logic

      In the Supabase dashboard, open Authentication, then Policies, and read every policy on a table that holds customer data.

      Critical
    • Any signed-in user can read every row

      In the Supabase dashboard open Authentication, then Policies. Row Level Security (RLS) is the per-row access rule set Postgres applies to each query, and this page shows each policy's expression.

      Critical
    • Row Level Security disabled on a table

      In the Supabase dashboard open Table Editor. Tables without Row Level Security (RLS, the per-row access rules Postgres applies to each query) show an RLS disabled or Unrestricted label next to the name.

      Critical
    • RLS policy that allows everything with using (true)

      In the Supabase dashboard open Authentication, then Policies. Row Level Security (RLS) is the per-row access rule set Postgres applies to each query, and this page lists every policy per table.

      Critical
    • Uploaded files in a public storage bucket

      In the Supabase dashboard open Storage and look for the Public label on each bucket; in Firebase open Storage, then the Rules tab.

      High
  3. Login and permissions

  4. Payments

    • Stripe webhook accepted without signature verification

      In the Stripe Dashboard, open Developers, then Webhooks, and copy the endpoint URL your app uses. It usually ends in something like /api/stripe/webhook or /functions/v1/stripe-webhook.

      Critical
    • No idempotency on payment handlers

      In the Stripe Dashboard, open Developers, then Webhooks, select your endpoint and open a recent invoice.paid or checkout.session.completed event for a test account.

      High
    • Price or plan taken from the client

      Open your app's pricing page in Chrome, press F12 to open developer tools (the browser's built-in inspector), and select the Network tab.

      High
    • Subscription state trusted from local storage

      Sign in to your app with a free account, press F12 to open developer tools, select the Application tab, then Local Storage on the left.

      High
    • Stripe test keys in production

      Open your live app's checkout, press F12, select the Network tab, and start a checkout. Look for requests to stripe.com or js.stripe.com and read their URLs and payloads for a key beginning pk_test_ or a session ID beginning cs_test_.

      High
  5. AI features

    • LLM API key exposed to the client

      Open your live app, press F12, select the Network tab, and use the AI feature once.

      Critical
    • No output validation before actions

      List the things your AI feature can do beyond replying with text: run queries, call APIs, send messages, change records, fetch URLs, run code.

      Critical
    • No spend cap on model calls

      Sign in to your model provider's console and open the billing or limits page (OpenAI: Limits; Anthropic: Settings, then Billing). Note whether a monthly spend limit and a spend alert are set.

      High
    • Prompt injection through user content

      List every place where text from a user, a webpage, an uploaded file or an email reaches the model: chat boxes, ticket forms, document upload, URL summarisers.

      High
    • Unbounded input length to the model

      Open the AI feature in your app and paste an unusually long text, for example a whole book chapter copied several times, then submit.

      Medium
  6. Deploy and config

  7. Mobile

    • Secrets in the mobile app bundle

      Open the project's .env files and app.json or app.config.js; list every variable whose name starts with EXPO_PUBLIC_ or that sits under extra.

      Critical
    • Offline state corrupting data

      On two phones (or a phone and the simulator) signed into the same account, put one in airplane mode and edit the same record on both.

      High
    • Certificate pinning absent

      Search the project for pinning-related words: pin, sha256, certificate, network_security_config, NSPinnedDomains, trustkit.

      Medium
  8. Reliability

  9. Data integrity

  10. Performance

Questions

github copilot security checklist

The list above: 52 checks across 10 categories, most severe first. Each links to a page with what the issue looks like, a self-check and a fix direction. Download the Markdown file to tick items off in your own notes.

can i use this checklist without buying anything

Yes. That is the point of publishing it. If you run every self-check and fix what you find, you have done most of what the security sweep does. What our test adds is a second account, scripts that enumerate everything, and a written report you can show someone.

Prefer someone else to run it: the security sweep covers the critical items in 24 hours; the pre-launch check covers the full list. Or run the self-check tool.