DEV Community
Is your Lovable or Supabase app readable without a login? A 15-minute check
In November 2026, the Hamburg security firm Crissy Field published a study of apps built with Lovable, the AI app builder. Working with the German newspaper Handelsblatt, they looked at 159,041 Lovable projects and found personal and confidential data that anyone could read without logging in: passport numbers, payment details, private chat messages, contracts and invoices. If you built an app with Lovable, Bolt, v0, Cursor or any other AI tool and it stores data in Supabase, this is worth 15 minutes today. The same mistake shows up in hand-written apps too. Short version: your Supabase key is visible in the browser on purpose. The only thing protecting your data is Row Level Security (RLS) and grants inside the database. Open the SQL Editor, list the tables that have RLS switched off, then request one of your own tables with nothing but the public key. If rows come back, strangers can read them too. Last checked: 15 November 2026. What the researchers found The numbers, as the report states them: Step Count Lovable projects examined (from the Common Crawl web archive, December 2025 to September 2026) 159,041 Of those, projects using Supabase 34,545 Sites that sent database records as soon as the page loaded, no login 24,664 Of those, sites where further read-only requests returned tables containing email addresses 7,403 (30%) The researchers are careful about that last figure. An email address can be a public contact address or test data, so 30% is not a confirmed leak rate, and their sample doesn't represent every Lovable app. Some news coverage quotes 24,664 or 7,403 as "the number of leaking apps". Neither is quite what the report says. What they did confirm is serious enough: A lifestyle forum exposed more than 80,000 profiles with names, emails and dates of birth, plus more than 200,000 chat messages. A service provider exposed more than 1,000 records with passport numbers, expiry dates and nationalities. Event organisers and restaurants exposed tens of thousands of ticket and food orders, including phone numbers, addresses and payment information. A property manager exposed AI-written summaries of internal emails about tenants and owners. The report could not establish whether any of this data had been misused. Why this happens A Supabase app talks to its database straight from the browser. To do that, the browser needs a key, called the publishable key (older projects call it the anon key). That key is meant to be public. Anyone can open your site, press F12 and copy it. So the key is not what protects your data. Two settings inside the database do: Grants decide whether a role may read or write a table at all. RLS policies decide which rows that role may touch. Supabase's own documentation puts it plainly: a table in an exposed schema without RLS is readable and writable by any role that has a grant on it. On many existing projects, new tables in the public schema are granted to every role by default, including anon, the role used for visitors who aren't signed in. Put together: if a table has RLS off, or has a policy that says "everyone may read everything", then your login screen is decoration. The data is one request away. AI builders produce an app that works. Whether signed-out strangers can read the table behind it is not something you see while clicking through your own app, logged in as yourself. The 15-minute check Do this only on your own project. 1. List tables with RLS switched off In the Supabase Dashboard, open SQL Editor and run: select tablename, rowsecurity
from pg_tables
where schemaname = 'public'
order by rowsecurity, tablename;
Every row showing false is a table with no row protection at all. 2. Look for policies that allow everything select tablename, policyname, cmd, roles, qual, with_check
from pg_policies
where schemaname = 'public'
order by tablename;
Read the qual column. A value of true on a policy whose roles include anon or public means every visitor can read every row. That's right...
Powered by Readybot.io
External Link
Platform
You are about to visit:
https://example.comThis will open in a new tab. Make sure you trust this link.