You're logged in. You change the id in the address bar to someone else's. Do you see their order?
| orders.id | owner | item | total |
|---|---|---|---|
| 101 | alice | Running shoes | $89 |
| 102 | bob | Desk lamp | $34 |
| 103 | alice | Headphones | $149 |
| 104 | carol | Coffee grinder | $59 |
| 105 | bob | Monitor arm | $72 |
RLS is off, so every row is readable with the same public key your app sends to every browser — including Carol's, and she never logged in here. This is the exact state the Moltbook and Lovable incidents were found in.
If yes, the app authenticated you but never authorized you. Those are two different questions.
Supabase draws the line in two sentences: "Authentication means checking that a user is who they say they are." And: "Authorization means checking what resources a user is allowed to access."
Two different questions
The question
- Authentication
- Who are you?
- Authorization
- What are you allowed to touch?
When
- Authentication
- Once, at login
- Authorization
- On every request
Example
- Authentication
- Password or Sign in with Google
- Authorization
- You may read your orders, not Ben's
What enforces it
- Authentication
- The login system
- Authorization
- Rules like Row Level Security
The classic bug lives in the gap: a correctly logged-in user changes a record's id and reads someone else's data. OWASP calls this broken object level authorization, and it's consistently one of the most common API weaknesses. Note that authentication worked perfectly; authorization was simply never checked.
On a Supabase-style app, the fix is the toggle above. Supabase: "Use RLS policies to authorize data access from the client." A Row Level Security policy adds a filter to every query so a request only ever returns rows the asker is allowed to see.
OWASP's two guiding habits: grant "only the minimum privileges necessary" (least privilege), and "deny access by default", so a resource is locked unless a rule explicitly opens it. The Moltbook lesson is what happens when neither is true.
Try it with the rules off. In the sandbox, flip Row Level Security off and, while logged in as Ana, read Ben's order by asking for it. You were authenticated the whole time. Turn RLS on and the same request returns only your own rows.
Check yourself
0/4 got itSaved on this device only. No account, no streaks.




