Skip to content

Edge Cases: Cross-fase

Scenario’s die meerdere fases raken of over het hele systeem gaan. 6 scenario’s.

Twee gebruikers doen tegelijk conflicterende acties.

Versterkt: S-2.3, S-3.2

  1. Laatste daycare plek: twee klanten boeken tegelijk. Een krijgt boeking, andere krijgt “vol” melding
  2. Laatste kamer: twee klanten boeken zelfde kamertype op zelfde datum. Een geblokkeerd
  3. Dubbele check-in: admin klikt twee keer snel op check-in knop. Slechts 1 check-in geregistreerd
  4. Gelijktijdige betaling: klant betaalt online terwijl admin handmatig markeert. Geen dubbele betaling
  5. Voucher credit race condition: klant boekt 2x daycare snel achter elkaar met 1 credit over. Slechts 1 boeking succesvol. Database constraint voorkomt negatief saldo. Check dat de tweede boeking een duidelijke foutmelding geeft (niet een generieke 500)

Resultaat: Database constraints en optimistic locking voorkomen inconsistenties. Race conditions op voucher credits afgevangen op database-niveau.

EC-15 Klant met meerdere honden in parallelle diensten

Section titled “EC-15 Klant met meerdere honden in parallelle diensten”

Complexe scenario’s met meerdere honden in verschillende diensten.

Versterkt: Alle fases

  1. Klant heeft hond A in boarding en hond B in daycare op dezelfde dag. Beide correct in dashboard
  2. Hond A in training, hond B op testdag. Onafhankelijke flows
  3. Klant annuleert alle boekingen. Alle facturen correct bijgewerkt
  4. Admin dashboard: klant met 3 actieve boekingen. Alle zichtbaar in klantprofiel
  5. Hond in boarding wiens vaccinatie tijdens verblijf verloopt. Systeem stuurt admin een waarschuwing: check hoe deze waarschuwing wordt getoond (notificatie op dashboard? email? inline waarschuwing bij de boeking?). Hond blijft in boarding maar admin moet actie ondernemen

Resultaat: Parallelle diensten verstoren elkaar niet, dashboard altijd consistent, vaccinatie-verloop tijdens boarding levert proactieve admin-waarschuwing op.

Beveiligingstests op applicatieniveau.

Versterkt: S-0.5, alle fases

  1. XSS: voer <script>alert('xss')</script> in als hondnaam / special_notes / behavior_notes. Wordt escaped
  2. SQL Injection: stuur '; DROP TABLE dogs;-- via API. Zod + parameterized queries blokkeren
  3. IDOR: klant A kent factuur-ID van klant B. Directe API call. Moet 403 of lege response geven
  4. File upload: upload .svg met embedded JavaScript. Geweigerd of gesanitiseerd
  5. Rate limiting: 100 snelle requests naar login endpoint. Rate limit actief na X pogingen per minuut (definieer exact: bijv. 10 per minuut? 5 per minuut?). Check dat de response een 429 status code is met een duidelijke melding
  6. CORS: XMLHttpRequest van evil.com naar API. Geblokkeerd door CORS (alleen APP_ORIGIN toegestaan)
  7. Sensitive data: check dat service role key niet in frontend bundle zit (check VITE_ prefix variabelen)
  8. Query limits: API endpoint zonder pagination. Check .limit() actief (max 200-500)
  9. Error leaking: forceer server error. Response bevat geen stack trace of interne details, alleen generieke foutmelding

Resultaat: Geen enkele OWASP top 10 kwetsbaarheid exploiteerbaar, rate limiting met duidelijke drempels gedefinieerd.

Hoe ziet de app eruit als er nog geen data is? Elke lege state moet een CTA bevatten.

Versterkt: Alle fases

  1. Klant dashboard /dashboard zonder boekingen. Melding: “Je hebt nog geen boekingen. Plan je eerste bezoek!” met CTA knop naar /bookings/new
  2. Klant factuuroverzicht /invoices zonder facturen. Melding: “Geen facturen gevonden.” (geen CTA nodig)
  3. Admin dashboard /admin zonder klanten. Lege state met uitleg dat er nog geen registraties zijn
  4. Hondenlijst /pets zonder honden. Melding: “Voeg je eerste hond toe” met CTA knop naar het toevoegformulier
  5. Kalenderweergave zonder boekingen. Lege kalender getoond, geen crash of foutmelding
  6. Filters die 0 resultaten opleveren. Melding: “Geen resultaten voor deze filters” met optie om filters te resetten
  7. Voucheroverzicht /subscriptions zonder actieve vouchers. Melding met CTA naar voucherkoop
  8. Abonnementenpagina /subscriptions zonder abonnement. Knop “Sluit een Unlimited abonnement af” zichtbaar

Resultaat: Alle lege states hebben duidelijke berichten met context-specifieke CTA’s, geen crashes of lege pagina’s.

EC-20 Sessiebeheer en gelijktijdig gebruik

Section titled “EC-20 Sessiebeheer en gelijktijdig gebruik”

Meerdere sessies en tabs tegelijk.

Versterkt: Alle fases

  1. Klant ingelogd in twee tabs. Actie in tab 1 reflecteert in tab 2 na refresh
  2. Klant logt uit in tab 1. Tab 2 wordt bij volgende actie naar login gestuurd
  3. Admin en klant kijken naar dezelfde boeking. Admin wijzigt status. Klant ziet update na refresh
  4. Wachtwoord wijzigen. Alle andere sessies worden uitgelogd (of niet? beslissing nodig)
  5. Token verloopt tijdens langdurig formulier invullen. Check welk type melding de gebruiker ziet: modal met “Je sessie is verlopen, log opnieuw in”, toast notificatie, of redirect naar login? Check dat ingevulde data niet verloren gaat (bijv. opgeslagen in localStorage of sessionStorage)

Resultaat: Consistente state tussen tabs, graceful token expiry met duidelijk meldingstype en geen dataverlies.