Who can read your database if they guess the URL?
ENGINEERING
OCTOBER 5, 2026

Who can read your database if they guess the URL?

4 min read
BACK TO BLOG

The most common fault in an AI-built app, explained without jargon, with a two-minute check you can run on your own app today.

If I could only check one thing on a newly built app, it would be this one. Not because it is the most sophisticated failure, but because it is the most common, the most damaging, and the most completely invisible from the inside.

Here it is in one sentence: a lot of AI-built apps will happily hand customer A's data to customer B, and sometimes to someone with no account at all.

How does that happen if I added login?

Because "has an account" and "is allowed to see this particular record" are different checks, and only the first one is obvious.

Picture an app with a page at /invoice/41. You log in, you see your invoice. Perfect. Now change the number to 42. If that loads somebody else's invoice, the app checked that you were logged in and never checked that the invoice was yours.

It is an easy thing to miss because nothing looks wrong. You only ever had one account while you were building, so there was no second customer whose data could appear. The fault needs two customers to become visible, and it arrives on the day you get your second one.

The more alarming version

Some apps built on hosted databases do not even need the login step. The tools that make it quick to get started often expose the database directly to the browser, and then rely on rules you are supposed to write to say who can read what.

If nobody wrote those rules, the default on some platforms is everything is readable. Not by hackers. By anyone who opens the developer console, which is a menu item in every browser on earth.

This is not a rare misconfiguration. It is the single most reported class of leak in the current wave of AI-built software, and the reason it keeps happening is that the app works beautifully either way.

The two-minute check

You do not need me for this.

  1. Log into your app and find a page showing something private — an order, a record, a document.
  2. Copy that page's full address.
  3. Open a private browsing window, where you are not logged in.
  4. Paste the address in.

If you can see the content, you have your answer, and you should not put a customer on that app until it changes.

Then do the second version: make a free second account, log in as that, and paste the first account's address. If account two can read account one's data, same answer.

That is it. No tooling, no code, no consultant.

If you find something

Do not panic and do not rewrite the app. This is usually a contained fix — a set of rules saying "a row belongs to the account that created it, and only that account may read it" — and on most platforms it is a day's careful work rather than a rebuild.

What it is not is something to put off until after launch. The window where this is cheap to fix is exactly the window where you have no customers, which is now.

And if it passes?

Good. Genuinely. Then the next questions are where your secret keys live, and whether anything would tell you if the app broke overnight. But you will have cleared the one that does the most damage.

I audit software for a living and I am still slightly amazed at how often this single check is the whole story.


Run the free website check — a public endpoint that drives a real browser at whatever address a stranger gives it, which carries its own version of this problem and has the boundary and tests that implies.

If you ran the check above and did not like what you saw, tell me what you found. I am one engineer; if it is a day's work I will tell you that rather than scope a project around it.

SHARE
4 min read
Read More

MORE ARTICLES

MSUFCU turned its own website off. That was the right call.
Engineering
Engineering

MSUFCU turned its own website off. That was the right call.

A PHP flaw became unauthenticated remote code execution with no workaround, so banks and governments went dark on purpose. What happened in Lansing, and why.

I gave an AI agent a wallet and a spending limit
Engineering
Engineering

I gave an AI agent a wallet and a spending limit

An autonomous client paid for its own API call in stablecoins. The payment was the easy half — the interesting half is the record of what it was refused.

The demo worked because you built it on your own data
Engineering
Engineering

The demo worked because you built it on your own data

The most expensive failure in applied AI is the one that looks like a success. Here is the test that catches it, and why it has to be able to fail.

How to read the arithmetic on a views guarantee
Engineering
Engineering

How to read the arithmetic on a views guarantee

A real offer promises 10 million views in 90 days or you do not pay. Here is the division that tells you what you are actually buying.