Skip to content
SniffPup
How it worksSample reportPricingGuidesAboutSign in

Is my Cursor app secure? A pre-launch checklist for apps built with Cursor

Check your live site first: run a free SniffPup scan on your deployed URL. No signup. You get a 0–100 score, every issue by title and severity, and full fixes free for every critical issue (with no critical, one other fix is free), with a fix prompt you can paste into Cursor.

A 100 means no issues were found in our checks. It is not proof that your app is secure.

Short answer: not automatically. Cursor is a code editor with an AI agent, so your app is exactly as secure as the code, keys and database settings it ends up with. Cursor gives you good tools for the code side. Once the app is live, every visitor can read what it sends to the browser, so check that side too.

1. Keep secrets out of the agent's reach and out of git

Cursor ignores .env* files and everything in your .gitignore by default, and a .cursorignore file can block more paths from Agent, Tab, Inline Edit and @ mentions. Cursor's ignore-file docs also say two things worth knowing: the terminal and MCP tools the Agent uses can't be blocked by .cursorignore, and complete protection isn't guaranteed.

How to check: make sure .env and .env.* are in .gitignore, then run git log --all -- .env to see whether one was ever committed. If a real key was committed or pasted into a chat, revoke it at the provider and make a new one. Deleting it from the code isn't enough.

2. Keep secret keys out of NEXT_PUBLIC_ and VITE_ variables

Many Cursor projects use Next.js or Vite. Next.js puts every variable that starts with NEXT_PUBLIC_ into the browser bundle, and Vite does the same with VITE_. That's fine for public values like a Supabase project URL, a Supabase anon or sb_publishable_ key, or a Stripe pk_live_ key. It is never fine for a Supabase service_role or sb_secret_ key, a Stripe sk_live_ key or an OpenAI sk- key. Calls that need a secret belong in server code (an API route, server action or Edge Function).

How to check: open your deployed site, open DevTools → Sources and press Ctrl+Shift+F (Cmd+Option+F on Mac). Search for service_role, sb_secret_, sk_live_, sk- and PRIVATE KEY. Our guide to finding exposed API keys on your website has the full list of patterns.

3. Check Row Level Security if you use Supabase

If your frontend talks to Supabase with the public anon key, Row Level Security policies are what keep strangers out of your data. Every table in an exposed schema needs RLS on, and each policy should be tied to the user (for example auth.uid() = user_id) unless the data really is public. A policy that says using (true) lets everyone read every row.

How to check: run Supabase's Security Advisor, then test with two accounts: user A should never see or change user B's rows. Our Supabase RLS checker guide has the SQL and a signed-out test.

4. Review what the agent changed before you merge

Read the diff for anything that touches sign-in, payments or data access. Cursor's Bugbot reviews pull requests and flags bugs and security issues, and it can be run on every PR update. It is a strong code-side check. It looks at your code changes, so pair it with an outside check of the deployed site.

5. Make sure protected pages are protected on the server

Hiding a button or redirecting in the browser doesn't protect anything. Admin-only data and actions need a server-side check or a database policy. Open your app signed out in a private window and try links that should need a login, then sign in as a normal user and change an ID in a URL to someone else's record. You should be refused both times.

6. Check what your live site exposes

  • Public /.env or /.git/config files (you should get a 404 or your normal page, never file contents)
  • A public JavaScript source map, which can hand out your original code
  • Missing security headers, cookies without Secure, HttpOnly or SameSite, and HTTP that doesn't redirect to HTTPS
  • Loose CORS settings, missing SPF or DMARC email records, and Supabase tables or Firebase data anonymous visitors can read

A free SniffPup scan checks all of these at once, passively: no logins, no attack payloads, and it never uses a secret key it finds.

How the tools compare

Facts checked Oct 21, 2026 on each tool's own pages. Each one does something well, and they work best together.

  • Cursor Bugbot sees your code changes in every pull request, which no outside scanner can. SniffPup adds the other side: what your deployed site actually serves to a stranger.
  • ScanVibe gives full results and fix instructions for every finding on its free plan, which is generous. SniffPup's free scan lists every issue plus a full fix free for every critical issue, keeps the last 20 scans per app on every plan, and writes fix prompts for Lovable, Cursor, Bolt and Claude Code.
  • SafeToShip has a free quick scan (its pricing page lists unlimited quick scans; its FAQ says free users get 1 scan per month), a $9 one-scan full report (the same price as our $9 Full Fix Report) and a deep scan that includes your code. SniffPup's $9 report adds 30 days of re-scans and a free first month of Solo upon opt-in, and Solo monitoring is $7/mo with weekly re-scans and email alerts, compared with SafeToShip Pro at $24/mo.

See the full side-by-side on how SniffPup compares and exactly what the scanner does.

Building with Bolt too? Here is our Bolt app security check.

Deployed already? Run a free Cursor app security scan on your live site.

FAQ

Is an app built with Cursor secure by default?

Not automatically. Cursor writes the code you ask for, and the security of the result depends on that code, your keys and your database settings. Cursor offers Bugbot, which reviews pull requests for bugs and security issues, but it reviews code changes, not what your deployed site serves to visitors. Check both.

Does .cursorignore keep my .env file safe?

It helps, but it isn't a guarantee. Cursor ignores .env* files and anything in .gitignore by default, and .cursorignore blocks more files from Agent, Tab, Inline Edit and @ mentions. Cursor's docs say the terminal and MCP tools the Agent uses can't be blocked by .cursorignore, and that complete protection isn't guaranteed. Keep real secrets out of the repo and rotate any key that was pasted into a chat.

Can SniffPup scan my Cursor app?

Yes, if it is deployed at a live web URL (for example a Vercel, Netlify or custom domain). SniffPup checks what that site serves to any visitor: secrets in HTML and JavaScript, public .env and .git files, source maps, security headers, cookies, HTTPS, CORS, email DNS records, and Supabase or Firebase read access using only the public config your site already ships. It can't scan native mobile apps or your source code.

Does a score of 100 mean my Cursor app is secure?

No. A 100 means no issues were found in our checks. SniffPup only sees what is publicly visible on your live site. It can't see your source code, server logic, database policies or anything behind a login, and the SniffPup badge is never proof of security.

A clean report is not a guarantee of security. Only scan sites you own.

Run a free scan →

Get the daily tip

Get one short security tip for your vibe-coded app each morning. Free, unsubscribe anytime.

We use your email only for these tips. See our Privacy Policy.

SniffPup

Ember supervises from the couch. SniffPup is a product of Ember and Saru LLC.
10850 Providence Rd #1370, Charlotte, NC 28277, USA

Support: support@sniffpup.com
Abuse & scan opt-out: abuse@sniffpup.com

Have an idea? Drop it in our suggestion box or email us. We read all feedback and may improve SniffPup in future updates; we can't promise any specific feature. Suggestions are covered by the Feedback section of our Terms.

ProductFree scanSample reportPricingHow our scanner worksHow scoring worksFAQCompareGuidesFree checkersBlogChangelogStatus
CompanyAboutSniffed by SniffPup badgeSniffPupScanner bot & opt-outsecurity.txtSniffPup on XContact
LegalTermsPrivacyAcceptable UseRefunds

SniffPup checks what is publicly visible on your site. A clean report is not a guarantee of security. © 2026 Ember and Saru LLC.