A security checklist for your AI-built app.

You built an app with an AI tool, people are starting to use it, and you cannot read the code well enough to say whether it is safe. This checklist names the six doors that are most often left open in apps like yours, shows how to check each one without reading code, and tells you which to close first.

Most break-ins use a door somebody left open

When an app built with an AI tool gets broken into, the story is usually a dull one. Nobody wrote a clever attack. A private page answered anyone who asked for it, or a password for a paid service sat in a place the public could read, and a stranger walked through. That is good news for a founder who cannot code, because open doors can be listed and each one can be checked.

A common response is to paste a long security prompt into the builder, full of terms copied from somewhere else, and trust the reply that says everything is now secure. The tool may well have changed something. The trouble is that you cannot check what you cannot name, so you have no way to tell a real repair from a confident sentence. This page gives you names in plain words, and a test for each, so the answer no longer rests on trust.

Six things matter most, and the rest of the page takes them in order. Each user reaches only their own data. Sign-in comes from a trusted service. The keys your app uses to pay for other services stay out of the code. Admin pages open for you and nobody else. Wrong password guesses are limited. The ready-made parts your app is built from are kept up to date.

The six doors, and how urgent each one is

Use the table as your working list. Read across each row, run the check with accounts and an app that belong to you, and write down what happened. The last column is a guide for an app that already has real users. If yours holds only test data, every row can wait until before launch, and none of them can wait until after it.

Six doors, what a stranger could do through each, how you check it, and how urgent it is

The door
One user can open another user's data
What a stranger could do
Read, and sometimes change, records that belong to your other customers
How you check
Two accounts of your own: copy a private page address from the first and open it as the second
How urgent
Fix before anyone else signs up
The door
Sign-in was built by hand
What a stranger could do
Get into accounts through a weakness in how passwords are stored or checked
How you check
Ask your builder which service handles sign-in and where passwords are kept
How urgent
Fix before launch, sooner if real users have passwords with you
The door
An API key sits in the code
What a stranger could do
Use the paid service on your account until the key is turned off
How you check
Ask your builder to search the code and every older version of it for keys
How urgent
Replace the key today
The door
Admin pages open for anyone
What a stranger could do
See or change everything an admin can
How you check
Paste the admin page address into a private window, signed out and then as an ordinary account
How urgent
Fix before anyone else signs up
The door
No limit on wrong passwords
What a stranger could do
Run a program that guesses passwords for hours without being stopped
How you check
On your own account, enter a wrong password many times and see whether the app slows you or locks you out
How urgent
Fix before launch
The door
Ready-made parts are out of date
What a stranger could do
Use a weakness that has already been published for an old part
How you check
Ask your builder to list the parts with known security problems and update them
How urgent
Check now, then on a regular schedule

Door one: each user reaches only their own data

Think of a hotel key card. It opens your room, and it does nothing at the room next door or anywhere else on the floor. Your app should treat every account the same way: a signed-in customer can open their own orders, messages and files, and a request for anyone else's is refused. In the apps we see, this is the door left open most often, because an app tested by one person with one account looks identical whether the lock exists or was never fitted.

You can test it in a few minutes. Make two accounts with email addresses you own. Signed in as the first, open something private, such as an order or a profile, and copy its web address. Open a private browser window, sign in as the second account and paste the address. If the page opens, a stranger can open it too. Use only accounts you created, with made-up data in them, and never try this against a real customer's record or against an app that belongs to someone else.

If the page did open, we have a separate guide that covers this one door in depth: why it happens, a longer set of tests, and what to do when real customers are already signed up.

Doors two, four and five: sign-in, admin pages and password guesses

Sign-in should come from a service whose whole job is sign-in. Storing passwords safely, sending reset emails and remembering who is signed in are each easy to get slightly wrong, and a slight mistake here hands over accounts. Hosted platforms such as Supabase include a sign-in service, and there are others that do only this. Ask your builder a direct question: which service handles sign-in in this app, and does the app store any passwords itself? If the answer is that the app keeps its own password table, plan to replace it with a trusted service.

Admin pages need a lock that holds when somebody types the address directly. A link that is missing from the menu keeps honest users away and stops nobody who is curious. Copy the address of your admin page, open a private window and paste it while signed out. Then make an ordinary account and paste it again. Both attempts should end at a sign-in screen or a refusal. If either one shows the admin page, close this door before the others on the list.

Password guessing is done by programs that try thousands of common passwords against a sign-in form. The defence is a limit: after a handful of wrong attempts the app makes the person wait, or locks the account for a while. Trusted sign-in services commonly include this, which is one more reason to use one. To see whether yours has it, enter a wrong password on your own account many times in a row. An app that lets you carry on at full speed has no limit.

Door three: API keys, and the step people skip

An API key is the password your app uses to reach a service you pay for, such as an AI model, an email sender or a payment provider. Whoever holds the key can use the service as you. A stranger who finds one spends your money, and with some services can also read the data held there. Keys belong in the settings area your host provides for secrets, which stays private. They should never be typed into the code itself, because code gets copied, shared and sometimes published.

Here is the step people skip. The place your code is stored, GitHub for example, keeps every earlier version of every file. That history is what lets you go back to last week's working copy. It also means that a key removed from today's code is still sitting in an older version, readable by anyone who can see the project. Deleting a leaked key from the code is not enough.

The repair has two parts and happens outside the code. Go to the service that gave you the key and issue a new one. Then turn the old one off in the same place, so it stops working everywhere at once. Put the new key in your host's secret settings and confirm the app still runs. While you are signed in to that service, look at recent usage and billing for activity you do not recognise.

  • Ask your builder to search the current code and its full version history for anything that looks like a key or password.
  • For each one found, issue a new key at the service it came from.
  • Turn the old key off at that service. Removing it from the code does not do this.
  • Store the new key in your host's private settings and test the app.
  • Check that service's usage and billing pages for charges you did not cause.

Door six, and how to find what you missed

Very little of your app was written from nothing. Most of it is ready-made parts, called dependencies, that other people wrote and thousands of apps share. When a weakness is found in one of them, the fix is published along with a description of the weakness. An app still running the old part has a hole that is written up in public. Ask your builder to list the dependencies with known security problems and to update them, then run through your app's main screens afterwards, since an update can change how a part behaves.

For everything you could not test by hand, ask the AI tool that built the app to look for you, and be specific about what you want. Request a full security audit of the app and of its version history, covering the six areas on this page, with each problem explained in plain words and ranked by how much damage it could do. Ask it to report first and change nothing until you have read the list.

Then work from the top. Fix the biggest problem, run the matching check from the table again, and move to the next. Treat the audit as a list of leads. An AI tool can miss a problem and can describe one that is not there, so the checks you ran yourself are the part you can rely on, and a clean report is weaker evidence than a pasted address that was refused.

One pass through the checklist

Run it again after every change, and when to get help

A checklist passed in the spring says little about the app you have in the autumn. Each new feature adds pages and data, and the builder that left a door open the first time can leave the same one open on the new page. Repeat the two-account check every time something new is added, on the new screens in particular. Ask for the audit again after a large change, and whenever a key has been shared with someone who has since left the project.

Get help when the checks show that real customers' data or money was within reach, when a repair to one door keeps breaking a screen somewhere else, or when the audit lists problems you cannot follow even in plain words. The same goes for an app that handles health, payment or children's information, where a miss costs more. If you believe someone has already used an open door, replace the keys first, keep the logs your host and services hold, and ask for advice on what you are required to tell your users. This page is not legal advice.

Our Diagnostic is a fixed-price written plan. We read the code, its history and the accounts it depends on, list which doors are open and who could reach what, and set out the repairs in order, with the fee credited to the build if you go ahead with us. The work is done in your accounts, and your repo and accounts stay yours.

The six checks, in the order to run them

Keep a dated note of each result. The note tells you what changed the next time you run the list, and it gives anyone who helps you a place to start.

  1. A private page address copied from one of your accounts is refused when pasted into the other.
  2. You know which service handles sign-in, and the app stores no passwords of its own.
  3. No key appears in the code or its history, and any key that ever did has been replaced and turned off.
  4. The admin page address is refused when you are signed out and when you are signed in as an ordinary account.
  5. Repeated wrong passwords on your own account lead to a wait or a lock.
  6. Parts with known security problems have been updated, and the main screens still work.
How we can help

We can check the doors with you.

Book a free consultation and tell us which checks you ran and what they showed. We will say whether the repairs sound like ones you can make in your builder or whether the Diagnostic fits better. If we do the work, we close each door in your accounts, retest it with separate accounts, and hand you the written results.

Book a free consultation

On the project call, we’ll discuss the problem, your existing tools and what TDAT should take off your hands. Then we can define the scope and next steps.

Or call (919) 289-1231

Questions before we start

How do I check the security of my AI-built app if I cannot read code?

Run tests that need no code. Make two accounts you own and try to open the first account's private page from the second. Paste your admin page address into a private window. Enter a wrong password many times on your own account. Then ask the tool that built the app for an audit covering the six areas on this page, explained in plain words.

Is pasting a security prompt into my AI builder enough?

It can help, and it leaves you unable to tell whether it worked. A reply saying the app is secure is a sentence you cannot verify. Pair every request with a test you run yourself, such as the two-account check, so you see the door refuse you.

I deleted a leaked API key from my code. Am I safe?

No. The place your code is stored keeps earlier versions, and the key is still in them. Go to the service that issued the key, create a new one and turn the old one off there. Then check that service's usage and billing for activity you do not recognise.

Which of the six should I fix first?

A key that has been exposed, because it can be used the moment it is found and replacing it is quick. After that, anything that lets one person reach another person's data or your admin pages. The limit on password attempts and the outdated parts follow.

How often should I run this checklist?

Every time you add a feature, a page or a new kind of data, and before any launch or announcement that will bring in new users. The two-account check takes a few minutes and is the one to repeat most often.

Can I run these tests on someone else's app?

No. Test only apps and accounts that belong to you, using made-up data. Probing an app you do not own can be against the law, and trying real customers' records in your own app can expose information you have no reason to see.

What does TDAT need to review my app's security?

Access to the code and its history in your own accounts, the address of the live app, a list of the services it uses, and the kinds of user you have. We agree the access with you first, keep it to what the review needs, and test with accounts made for the purpose.