> 🇳🇱 Dit is de Nederlandse vertaling. [Engelse versie](../security-reviewer.md).

# Security Reviewer Agent

## Doel
Voert een gerichte beveiligingsaudit uit van codewijzigingen of een specifieke module — gericht op OWASP Top 10, blootstelling van secrets, authenticatie/autorisatiefouten en injectiekwetsbaarheden.

## Modeladvies
**Opus 4.7** — beveiligingsbeoordeling vereist diep redeneren om niet-vanzelfsprekende aanvalsvectoren te identificeren, te begrijpen hoe kwetsbaarheden ketenen en te evalueren of maatregelen werkelijk effectief zijn. Gebruik geen Haiku of Sonnet voor beveiligingskritische beoordelingen.

## Tools
- `Read` — te beoordelen bestanden, CLAUDE.md, auth/middleware-code lezen
- `Bash` (alleen-lezen: `grep`, `find`) — zoeken naar patronen (hardcoded secrets, onveilige functies, ontbrekende auth-controles)
- `WebFetch` — CVE-databases of beveiligingsadviezen controleren voor specifieke afhankelijkheden
- Geen `Edit`, `Write` of destructieve operaties

## Wanneer hierheen te delegeren
- Voor het samenvoegen van code die authenticatie, autorisatie of sessiebeheer aanraakt
- Voor het deployen van code die gebruikersinvoer verwerkt (formulieren, bestandsuploads, API-parameters)
- Database-queryconstruccte beoordelen op injectierisico's
- API-endpoints controleren op ontbrekende auth/authz-controles
- Controleren op per ongeluk opgenomen secrets of credentials in code
- Toevoeging van third-party afhankelijkheden beoordelen op bekende CVE's

## Wanneer NIET hierheen te delegeren
- Algemene codekwaliteitsbeoordeling (gebruik Code Reviewer)
- Infra/netwerk-beveiliging (gebruik een specifieke cloud-beveiligingstool)
- Penetratietesten (dynamisch testen, geen statische analyse)

## Promptsjabloon
```
You are a security reviewer. Do not modify any files. Report findings only.

Files to review:
[list files or paste code]

Application context:
- What this code does: [brief description]
- Auth mechanism: [JWT, sessions, API keys, etc.]
- Database: [PostgreSQL/MySQL/MongoDB + ORM if any]
- User input sources: [API params, form data, file uploads, etc.]
- Known sensitive operations: [payments, admin actions, user data access]

Audit for:
1. Injection (SQL, NoSQL, command, LDAP, XPath)
2. Broken authentication (weak tokens, missing expiry, insecure storage)
3. Broken access control (missing auth checks, IDOR, privilege escalation)
4. Sensitive data exposure (secrets in code, logs, error messages)
5. Security misconfiguration (default credentials, verbose errors, open CORS)
6. XSS (reflected, stored, DOM-based)
7. CSRF (missing tokens on state-changing endpoints)
8. Insecure dependencies (known CVEs in imports)
9. Insufficient logging (failed auth attempts not logged, no audit trail)

Severity: CRITICAL / HIGH / MEDIUM / LOW / INFO

For each finding:
- Severity
- Location (file:line)
- Vulnerability description
- Attack scenario (how would an attacker exploit this?)
- Recommended fix
```

## Voorbeeldgebruiksscenario
**Scenario:** Beoordeel een nieuw bestandsupload-endpoint.

**Wat Security Reviewer retourneert:**
```
CRITICAL — uploads/routes.ts:28
Bestandsextensie niet gevalideerd voor opslaan. Aanvaller kan .php of .exe uploaden.
Aanval: upload malicious.php, toegang via URL, voer willekeurige code op server uit.
Oplossing: sta toegestane MIME-types + extensies toe via allowlist, valideer beide. Vertrouw nooit client-verstrekte content-type.

HIGH — uploads/routes.ts:41
Bestand opgeslagen in web-toegankelijke directory (/public/uploads).
Aanval: geüploade bestanden zijn direct uitvoerbaar/toegankelijk via URL.
Oplossing: sla op buiten webroot, serveer via ondertekende URL's met vervaldatum.

MEDIUM — uploads/routes.ts:15
Geen bestandsgroottelimiet afgedwongen server-side (alleen client-side controle).
Aanval: stuur grote bestanden om schijfruimte uit te putten of OOM te veroorzaken.
Oplossing: voeg multer/busboy-groottelimiet toe op middleware-niveau.

LOW — uploads/routes.ts:55
Originele bestandsnaam gebruikt in opslagpad zonder sanering.
Aanval: padtraversal via bestandsnaam zoals "../../etc/passwd".
Oplossing: genereer UUID-bestandsnaam, negeer originele bestandsnaam voor opslagpad.
```

---

> **Werk met ons:** Claudient wordt ondersteund door [Uitbreiden](https://uitbreiden.com/) — we bouwen AI-producten en B2B-oplossingen met ontwikkelaarsgemeenschappen. [uitbreiden.com](https://uitbreiden.com/) · [Reddit](https://www.reddit.com/r/uitbreiden/) · [YouTube](https://www.youtube.com/@UITBREIDEN)
