Hoe je login-flow te omzeilen is en hoe je dat voorkomt
Je hebt een loginpagina. Gebruikers moeten inloggen om bij hun gegevens te komen. Goed begin.
Maar een loginpagina is alleen een deur. De echte vraag is: wat zit er achter die deur, en is dat ook afgesloten?
Wat vaak misgaat
AI-tools bouwen een loginpagina die gebruikers doorstuurt naar een dashboard. Maar de data achter dat dashboard, je API-endpoints en database-calls, die zijn soms gewoon openbaar.
Dat betekent dat iemand zonder in te loggen direct naar jouwapp.nl/api/gebruikers kan gaan en alle data opvraagt. De loginpagina was decoratie.
Een concreet voorbeeld
Stel je bouwt een app met Supabase. Je hebt een tabel bestellingen met klantdata. Je frontend toont die data alleen als je bent ingelogd.
Maar als je vergeet Row Level Security in te stellen in Supabase, dan kan iemand met de Supabase API-url en je publieke sleutel direct alle bestellingen opvragen. Zonder account, zonder wachtwoord.
De loginpagina houdt niemand tegen.
Hoe je dit voorkomt
1. Controleer elke API-route Elke route die data teruggeeft of aanpast moet controleren of de gebruiker is ingelogd. Niet alleen de pagina die ernaar linkt, maar de route zelf.
2. Gebruik Row Level Security (Supabase) Als je Supabase gebruikt: zet RLS aan op elke tabel. Standaard staat het uit, en dat is gevaarlijk.
3. Test alsof je geen account hebt Open je app in een incognitovenster. Ga direct naar de URL’s van je API of dashboard. Wat zie je? Als je data ziet zonder in te loggen, heb je een probleem.
4. Vertrouw nooit alleen de frontend Je frontend kan prima controleren of iemand is ingelogd. Maar iemand met technische kennis omzeilt je frontend makkelijk. De beveiliging moet in je backend zitten.
Wil je weten of jouw app echt beveiligd is?
Een loginpagina is een goed begin, maar niet genoeg. Wij controleren of de beveiliging ook achter de schermen klopt, inclusief je API-routes, databasetoegang en sessies.
Wil je jouw project laten controleren?
Binnen 3 dagen een concreet rapport van een specialist.
Laat jouw project controleren →