Zo krijg je je rapport. In Mijn Omgeving, niet in een map.
Een voorbeeld op een app die niet bestaat: jouwapp.nl. Elke bevinding staat klaar met uitleg, bewijs en wat je nu kunt doen.
Bevindingen
KritiekHertest geslaagd op 29 september
Klantgegevens zijn voor iedereen te zien
- Wat we vonden
- Wie één cijfer in het adres verandert, ziet het profiel van een andere klant.
- Wat het betekent
- Namen en e-mailadressen van al je klanten liggen open.
- Zo los je het op
- Laat de database per klant controleren wie wat mag zien.
- Waar
GET /rest/v1/klanten?id=eq.1044- Oorzaak
- De tabel klanten heeft geen row level security. Elke ingelogde gebruiker kan elke rij opvragen.
- Categorie
- OWASP A01, Broken Access Control
- Oplossing
alter table klanten enable row level security; create policy "eigen gegevens" on klanten for select using (auth.uid() = user_id);
HoogHertest geslaagd op 29 september
Een betaling is over te slaan
- Wat we vonden
- Wie na het kiezen van een abonnement de betaalpagina wegklikt en naar de welkomstpagina gaat, krijgt toch toegang.
- Wat het betekent
- Klanten kunnen je app gebruiken zonder te betalen.
- Zo los je het op
- Geef pas toegang als de betaalprovider laat weten dat de betaling binnen is, niet als iemand op betalen klikt.
- Waar
POST /api/abonnement, daarna /welkom- Oorzaak
- De app zet het abonnement in de browser op actief zodra iemand op betalen klikt. De webhook van de betaalprovider wordt niet gecontroleerd.
- Categorie
- OWASP A04, Insecure Design
- Oplossing
// Alleen de webhook van de betaalprovider zet het abonnement aan. if (event.type === "checkout.session.completed") { await db.abonnement.update({ where: { klantId: event.data.object.metadata.klantId }, data: { actief: true }, }); }
LaagNog open
Foutmeldingen tonen te veel
- Wat we vonden
- Bij een fout laat de app stukjes code en de namen van tabellen zien.
- Wat het betekent
- Het verraadt hoe je app gebouwd is. Dat maakt het zoeken naar andere fouten makkelijker.
- Zo los je het op
- Toon een gewone foutmelding en bewaar de details in je logboek.
- Waar
GET /api/bestellingen?id=abc- Oorzaak
- De foutafhandeling stuurt error.message en de stacktrace mee in het antwoord.
- Categorie
- OWASP A05, Security Misconfiguration
- Oplossing
catch (error) { console.error(error); return Response.json({ fout: "Er ging iets mis." }, { status: 500 }); }
Gewone taal
Per bevinding lees je wat er mis is, wat het betekent en wat eerst dicht moet. Voor je developer staat de technische kant erbij.
Jij kiest wie het oplost
Laat Red Nota het oplossen, dan zie je vooraf wat we aanpassen en wat het kost. Of los het zelf op met onze uitleg.
Hertest en attest
Na het oplossen testen we opnieuw. Slaagt de hertest, dan kun je met een attest laten zien dat je app is nagekeken.