20. Beveiliging (Ja, Echt)
Een applicatie vol exploits die zich druk maakt om haar eigen beveiliging is als een brandweerman die rookmelders installeert in zijn eigen huis: het lijkt overbodig, maar het is juist het bewijs dat hij het serieus neemt. Het bewijs dat de loodgieter géén lekkende kraan heeft. Deze applicatie heeft de beste kranen van de straat. Let maar op.
Toegangscontrole (3 lagen)
- Localhost bypass —
127.0.0.1/::1zonder credentials: directe toegang. Je bent lokaal. Je bent vertrouwd. Voorlopig. - Session login —
IB_ADMIN_USER+IB_ADMIN_PASSWORD: login via/login. Timing-safe vergelijking. Open-redirect preventie. Het soort beveiliging dat je niet opvalt totdat iemand het probeert te omzeilen en faalt. - Token auth —
X-Dashboard-Token/X-Task-Tokenheader. Voor als je te lui bent om in te loggen maar te professioneel bent om het onbeveiligd te laten. Een gezonde middenweg.
Content Security Policy
Nonce-based CSP op alle dashboardpagina’s. Geen inline scripts of styles zonder geldige nonce. De lab-routes zijn uitgesloten van CSP — want een CSP op een XSS-lab is als een “niet rennen”-bordje op een atletiekbaan. Het is technisch correct. Het is praktisch absurd.
Subproces-veiligheid
Geen shell=True. Nergens. Nooit. Onder geen enkele omstandigheid. Ook niet als je heel lief vraagt. Alle subprocessen gebruiken expliciete argumentlijsten. Regex-validatie. Pad-traversal verboden. Het is het soort discipline die je niet verwacht in een project met bestanden die crystalmeth.cs heten. En dat contrast is het meest veelzeggende aan het hele project: onder de belachelijke namen zit code die zich aan de regels houdt. Het is als een clown die een uitstekende belastingaangifte doet.
Task Runner Allowlist
Alleen commando’s in de _TASKS-dictionary worden uitgevoerd. De rest wordt geweigerd. Geen discussie. Geen “maar als je het echt wilt.” Nee. Punt. Het is het meest assertieve onderdeel van de hele applicatie, en je zult het nooit waarderen totdat het je redt van een typfout die anders je hele systeem had platgelegd. Dan waardeer je het heel erg. Even. En dan vergeet je het weer.
Omgevingsvariabelen
| Variabele | Standaard | Doel |
|---|---|---|
SECRET_KEY | random | Session/CSRF signing |
IB_ADMIN_USER / IB_ADMIN_PASSWORD | niet ingesteld | Login-credentials (schakelt localhost-bypass uit) |
DASHBOARD_ACCESS_TOKEN | niet ingesteld | Token-gebaseerde API-toegang |
TASK_RUNNER_TOKEN | niet ingesteld | Token voor task runner API |
PUBLIC_UPLOAD | false | Uploads van niet-localhost |
PUBLIC_DOWNLOADS | false | Downloads van niet-localhost |
SESSION_COOKIE_SECURE | false | Secure cookie flag |
BEHIND_PROXY | false | ProxyFix inschakelen |