🔒
Beveiliging
Gebouwd in lagen — van login tot OWASP Top 10.
Sms-gebaseerde tweefactorauthenticatie, rolgebaseerde toegangscontrole, brute-force-bescherming, HTTP-beveiligingsheaders, audit-log over elke actie en automatische OWASP ZAP-scan bij elke pull request.
- Sms-gebaseerde 2FA met 10-minuten eenmalige codes
- Rolgebaseerde toegang op pagina's en API-endpoints
- Brute-force-bescherming met rate limits per endpoint
- OWASP Top 10-compliance met wekelijkse ZAP-scan
Beveiliging is geen feature — het is fundament
Elke laag is gebouwd met beveiliging in gedachten. Login wordt beschermd door brute-force rate limits en optionele tweefactorauthenticatie. Elke pagina en elk API-endpoint controleert rechten bij elke call — niet alleen bij login. SQL-injectie is onmogelijk (geparameteriseerde queries), XSS wordt geblokkeerd (DOMPurify), CSRF-aanvallen worden voorkomen (SameSite=lax-cookies), en clickjacking wordt gestopt via de X-Frame-Options-header.
Elke actie wordt gelogd. Het audit-log toont wie wat heeft gedaan in het admin-paneel. Het beveiligingslog toont mislukte loginpogingen, 2FA-gebeurtenissen, toegang geweigerd en rate-limit-overschrijdingen. Het systeem is geaudit tegen OWASP Top 10, en OWASP ZAP-scanning draait automatisch bij elke pull request naar main.
Geparameteriseerde SQL-queries — geen injectie mogelijk
DOMPurify schoont door gebruiker geleverde HTML — geen XSS
Sessie-cookies HttpOnly + Secure + SameSite=lax
Audit-log over elke admin-actie
Beveiligingslog over mislukte logins en 2FA-gebeurtenissen
Dependabot + composer/npm audit bij elke build
Tweefactorauthenticatie (2FA)
Sms-gebaseerd
Medewerkers kunnen sms-gebaseerde 2FA op hun account inschakelen.
6-cijferige eenmalige code
Bij login wordt een 6-cijferige code via sms gestuurd die bevestigd moet worden voor toegang.
10 minuten geldig
Codes verlopen na 10 minuten en kunnen maar één keer gebruikt worden.
Gelogd in het beveiligingslog
Elke 2FA-gebeurtenis — voltooid en mislukt — wordt geregistreerd.
Rolgebaseerde toegangscontrole
Elk deel van het systeem is beschermd door benoemde rechten.
Rechten per pagina
Gebruikers krijgen alleen toegang tot de delen van het systeem die hun rol toestaat.
Menu-items automatisch verborgen
Items zonder rechten verschijnen niet in het menu — zodat gebruikers nooit knoppen zien die ze niet kunnen gebruiken.
Pogingen gelogd
Pogingen om pagina's zonder rechten te benaderen worden gelogd in het beveiligingslog.
In-product beheerd
De rechtenstructuur wordt onderhouden onder Instellingen → Rollen en rechten.
Brute-force-bescherming
Drie lagen rate limits beschermen tegen overbelasting en aanval.
Login-blokkering
Te veel mislukte pogingen leiden tot een tijdelijke blokkering.
Algemeen: 60/min
60 verzoeken per minuut voor elk geauthenticeerd endpoint.
Zoeken: 30/min
30 verzoeken per minuut voor zoek-endpoints.
Bulk-lookup: 20/min
20 verzoeken per minuut voor bulk-lookups.
Gestandaardiseerde fout
Bij overschrijding wordt een standaard foutrespons met retry-after info teruggestuurd.
HTTP-beveiligingsheaders
Elke respons bevat beschermende headers.
Strict-Transport-Security
Forceert HTTPS — voorkomt afluisteren.
X-Content-Type-Options
Blokkeert MIME-sniffing-aanvallen.
X-Frame-Options
Beschermt tegen clickjacking — het systeem kan niet op vreemde sites worden ingebed.
Referrer-Policy
Voorkomt lekkage van interne URL's naar derden.
Permissions-Policy
Blokkeert onbevoegd gebruik van camera, microfoon en locatie.
Inputvalidatie en injectiebescherming
Geparameteriseerde queries
Alle databasetoegang gaat via Eloquent ORM — SQL-injectie is onmogelijk.
Validatie per endpoint
Elk API-endpoint valideert binnenkomende data voor verwerking.
DOMPurify tegen XSS
Door gebruiker geleverde HTML wordt met DOMPurify geschoond voor weergave.
MIME- en extensievalidatie
Geüploade bestanden worden gevalideerd op type en extensie en opgeslagen buiten de webroot.
Audit-log en beveiligingslog
Audit-log over admin-acties
Elke aanroep van het admin-paneel wordt gelogd met gebruikers-ID, URL, HTTP-methode, IP en tijdstempel.
Gevoelige velden geschoond
Wachtwoorden en API-sleutels worden automatisch geschoond voor logging.
Beveiligingslog
Mislukte logins, 2FA-gebeurtenissen, toegang geweigerd en rate-limit-overschrijdingen worden apart geregistreerd.
Alleen-lezen
Het beveiligingslog is alleen-lezen en toegankelijk voor administrators.
OWASP Top 10 en kwetsbaarheidsscanning
Het systeem is geaudit tegen OWASP Top 10 (2021) en gehard op alle 10 categorieën.
Gebroken toegangscontrole
Rolgebaseerde rechten op elke pagina en elk API-endpoint.
Cryptografische fouten
HTTPS, veilige cookies, gehashte eenmalige codes.
Injectie
Eloquent ORM en inputvalidatie — geen ruwe SQL met gebruikersinput.
OWASP ZAP-scanning
Baseline-scanning draait bij elke pull request naar main en wekelijks. Hoogrisico-bevindingen blokkeren merge.
composer + npm audit
Draait bij elke CI-build en stopt deploy bij kritieke pakketkwetsbaarheden.
Dependabot
Monitort dependencies wekelijks en opent automatisch pull requests voor updates.
Verantwoordelijke disclosure
info@ziix.dk
Beveiligingsproblemen worden privé gemeld met onderwerp "[SECURITY] DMS Vulnerability Report".
Ontvangstbevestiging binnen 48 uur
Kritieke issues worden gericht binnen 30 dagen opgelost.