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
| The door | What a stranger could do | How you check | How urgent |
|---|---|---|---|
| One user can open another user's data | Read, and sometimes change, records that belong to your other customers | Two accounts of your own: copy a private page address from the first and open it as the second | Fix before anyone else signs up |
| Sign-in was built by hand | Get into accounts through a weakness in how passwords are stored or checked | Ask your builder which service handles sign-in and where passwords are kept | Fix before launch, sooner if real users have passwords with you |
| An API key sits in the code | Use the paid service on your account until the key is turned off | Ask your builder to search the code and every older version of it for keys | Replace the key today |
| Admin pages open for anyone | See or change everything an admin can | Paste the admin page address into a private window, signed out and then as an ordinary account | Fix before anyone else signs up |
| No limit on wrong passwords | Run a program that guesses passwords for hours without being stopped | On your own account, enter a wrong password many times and see whether the app slows you or locks you out | Fix before launch |
| Ready-made parts are out of date | Use a weakness that has already been published for an old part | Ask your builder to list the parts with known security problems and update them | 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.
- A private page address copied from one of your accounts is refused when pasted into the other.
- You know which service handles sign-in, and the app stores no passwords of its own.
- No key appears in the code or its history, and any key that ever did has been replaced and turned off.
- The admin page address is refused when you are signed out and when you are signed in as an ordinary account.
- Repeated wrong passwords on your own account lead to a wait or a lock.
- Parts with known security problems have been updated, and the main screens still work.
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 consultationOn 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.