Guide · Security

Is my vibe-coded app secure?

Short answer: Probably not completely, and you can't tell by using it. Apps built with AI tools usually work, but they routinely skip the parts nobody sees: rules that stop strangers reading the database, secret keys kept out of the browser, limits on password guessing, and checks that one customer can't open another customer's data. The only way to know is to check those specific places, first from the outside the way a stranger would, then behind your login and in your code.

Updated 25 October 2026

What to do, step by step

A working app and a secure app are different things. Veracode's 2025 study of code written by more than 100 AI models found security flaws from the OWASP Top 10 in about 45% of the tasks it set. Here is what to check, most important first.

  1. Look at what every visitor downloads

    Open your site, press F12, and search the scripts under Sources for sk_live, service_role, sb_secret, postgres:// and PRIVATE KEY. Anything secret there is public. Rotate it (make a new key, retire the old one) and move the call that needs it to your server. Which keys are fine in the browser and which are not.

  2. Check who can read your database

    If you use Supabase, every table needs Row Level Security turned on with policies that only let people see their own rows. If you use Firebase, your Security Rules must not say if true. The key in your page is meant to be public, so these rules are the only thing between a stranger and your data. How to check Supabase.

  3. Try your app as a second customer

    Make two accounts. As the second one, open the first one's pages by changing the number or id in the address or in the request your app sends. If you see someone else's order, invoice or message, any customer can read every other customer's data. This is the most common serious hole in web apps and no outside scan can see it.

  4. Make sure private files are not public

    Open /.env, /.git/config and /admin on your own domain. Each should say "not found". What to do if one of them opens.

  5. Limit password guessing

    Try ten wrong passwords in a row on your sign-in page. If the eleventh attempt is still accepted instantly, attackers can try leaked passwords from other sites against your customers. Most auth providers have a rate-limit setting; turn it on, and do the same for password reset.

  6. Turn on the browser's protections

    Serve everything over the secure connection, and send the six security headers that tell browsers to block framing, sniffing and script injection. How to set them (Next.js example).

  7. Update what you borrowed

    Your app is mostly other people's code. Run npm audit (or turn on Dependabot on GitHub) and update anything with a known critical flaw. If your site runs on PHP, check PHP2Shell today.

  8. Know when something goes wrong

    Have backups you have restored at least once, error alerts that reach a person, and a way for customers to report a problem. Security is also noticing quickly.

What vibeship checks for you

You can do all of the above by hand. If you'd rather start with a list of what's wrong, the vibeship quick check runs from outside, the way a stranger sees your site. The quick check is free and needs no account. It shows your grade and how many problems sit in each area; what each problem is and how to fix it is in the full report.

Checked automatically

  • Secret keys shipped to the browser, and whether a stranger can read your Supabase or Firebase data
  • Private files and admin pages left public, and leftover developer code
  • Secure connection, the six security headers, and outdated PHP
  • A light break-in test from outside (no attack payloads in the quick check)
  • Email-forgery protection, legal pages, speed and search basics

Deeper, and what we don't check

  • The extensive scan (free with an account) tries to break in for real, from outside
  • With a subscription: whether one customer can open another's data, how sign-in sessions are protected, and a read of your code and its history for leaked keys and known holes
  • Not checked yet: backups, monitoring, and your business logic as a person would review it

Questions people ask

Can I just ask the AI to make my app secure?

It helps, and you should, but the same tool that left the gap is checking its own work. Ask it for specific things ("turn on row level security on every table and write policies so users only see their own rows") and then check the result from outside, as a stranger would.

Is a Lovable, Bolt or Replit app less secure than a hand-written one?

Not by nature. The platforms give you a reasonable starting point. The risk is that nobody on the team knows which parts need checking, so defaults that were fine for a demo end up in front of paying customers.

Do I need a penetration test from a security firm?

Once you hold sensitive data, sell to larger companies, or are asked for a security review, yes. Automated checks are the cheap first pass that clears the obvious problems, so the firm's time goes on the hard ones. They do not replace it.

How long does checking take?

The outside checks in this list take an afternoon by hand, or about a minute with the vibeship quick check. Fixing depends on what turns up; leaked keys and missing database rules are usually an hour each.

Best effort, not a guarantee: Our scans are best effort: they can miss a weakness or flag one that isn't there. This is advice, not a guarantee, and it doesn't replace a security firm. Your site's safety stays your responsibility. Read the terms.

Sources

Sources checked on 25 October 2026.

Related guides