Snel lanceren is prima, maar er is een kort lijstje dat je even wilt nalopen voordat je je app aan de wereld openstelt. Niks daarvan vereist dat je een security-expert bent, en alles is van buitenaf in een paar minuten te controleren. Hier is wat er echt toe doet, waarom elk punt pijn doet, en hoe je het oplost.
Hoe aanvallers dit binnen enkele minuten vinden
De meeste inbraken bij met AI gebouwde apps zijn geen slimme hacks. Iemand opent je site, drukt op F12, leest de JavaScript die je app al naar hun browser heeft gestuurd, en kopieert een URL die je app al aanroept. Geautomatiseerde scanners doen hetzelfde op grote schaal en kloppen dagelijks op duizenden sites aan bij veelvoorkomende paden zoals /.env of /.git. Alles hieronder is iets wat ze kunnen controleren zonder enige toegang tot je code, en dat is precies waarom jij het als eerste zou moeten controleren.
1. Geen secrets in de frontend
API-sleutels en tokens horen alleen op de server thuis. Wanneer een AI-assistent een dienst "verbindt", zet die de sleutel vaak regelrecht in de clientcode, waar iedereen hem in DevTools kan lezen. Een gelekte Stripe sk_live_-sleutel kan echt geld verplaatsen; een Supabase service_role-sleutel geeft je hele database uit handen. Houd geheime sleutels in server-omgevingsvariabelen en toon alleen de publieke sleutels die voor de browser bedoeld zijn. Zie de secrets die je app in de browser lekt.
2. HTTPS en security headers
Serveer alles via HTTPS en leid HTTP daarnaartoe om, zodat niemand het verkeer kan lezen of manipuleren. Voeg vervolgens de headers toe die browsers gebruiken om je gebruikers te beschermen: Content-Security-Policy om injectie in te dammen, Strict-Transport-Security om HTTPS vast te zetten, en X-Frame-Options om clickjacking te blokkeren. De meeste gegenereerde apps worden standaard zonder een van deze geleverd. Zie HTTP security headers uitgelegd.
3. Databaseregels (RLS) op elke tabel
Als je Supabase of Firebase gebruikt, praat je app rechtstreeks vanuit de browser met de database, dus de databaseregels zijn het enige wat tussen een bezoeker en je gegevens in staat. Zet Row-Level Security aan op elke tabel (niet alleen de belangrijke) met een deny-by-default-beleid, en vertrouw nooit op het verstoppen van een knop in de UI. Zonder dat leest en schrijft iedereen met de publieke sleutel je tabellen zonder in te loggen, precies het lek achter de Lovable RLS-kwetsbaarheid.
4. Geen blootgestelde gevoelige bestanden
Zorg ervoor dat .env, .git, databaseback-ups en source maps niet vanuit een browser bereikbaar zijn. Het komt verrassend vaak voor: één verzoek aan /.env kan elk secret dat je app gebruikt uit handen geven, en gepubliceerde source maps laten iedereen je originele code weer opbouwen. Blokkeer deze in de config van je host of framework.
5. CORS dichtgetimmerd
Een te ruim CORS-beleid dat elke origin weerspiegelt met credentials laat een kwaadaardige site de gegevens van je gebruikers lezen via hun sessie. Beperk de toegestane origins tot de domeinen die je daadwerkelijk beheert, en combineer nooit Access-Control-Allow-Origin: * met credentials.
6. Cookies en sessies goed ingesteld
Sessiecookies moeten Secure (alleen HTTPS), HttpOnly (onleesbaar vanuit JavaScript, zodat een XSS ze niet kan stelen) en SameSite (beschermt tegen CSRF) meedragen. Deze drie attributen zijn één regel config en sluiten een hele categorie account-overname-bugs af.
Jouw checklist van 2 minuten voor de lancering
- Geen
sk_live_,service_roleof privésleutels in je JavaScript. - HTTPS afgedwongen, met CSP, HSTS en X-Frame-Options ingesteld.
- Row-Level Security op elke databasetabel.
.env,.git, back-ups en source maps niet bereikbaar.- CORS beperkt tot je eigen origins, geen wildcard met credentials.
- Cookies met Secure, HttpOnly en SameSite.
Gewoon even regelen
In plaats van dit allemaal met de hand te controleren, draai je Scanaris: het controleert deze punten en zo'n 40 meer op je live site in 30 seconden, rangschikt de bevindingen op impact, en geeft je een kant-en-klare prompt om elk punt met je AI op te lossen, voordat iemand anders ze vindt.