{{-- ── Security alarms ──────────────────────────────────────────────────────── --}}
@php
$threatLabels = [
'sqli' => ['SQL-injectie', '💉', '#ef4444', 'Aanvaller probeerde SQL-code in de URL te injecteren om de database te manipuleren of uit te lezen.'],
'xss' => ['XSS', '🔗', '#f97316', 'Cross-site scripting poging: schadelijke JavaScript of HTML in de URL.'],
'traversal' => ['Padtraversal', '📂', '#f59e0b', 'Aanvaller probeerde via "../" buiten de webroot te navigeren en bestanden te lezen.'],
'scanner' => ['Scannerprobe', '🤖', '#8b5cf6', 'Geautomatiseerde scanner zocht naar bekende kwetsbaarheden (bijv. .env, wp-admin, phpMyAdmin).'],
];
@endphp
{{-- Detection legend (always visible, collapsible) --}}
🔍 Wat detecteren wij?— klik om uit te klappen
{{-- SQL injection --}}
💉 SQL-injectieType: sqli
De aanvaller probeert SQL-commando's in de URL te verstoppen om de database te lezen, aan te passen of te verwijderen.
Detectie gebeurt op patronen in het URL-pad en de querystring.
@foreach ([
["UNION SELECT", "Gegevens uit andere tabellen ophalen"],
["SELECT … FROM", "Directe queryconstructie in de URL"],
["DROP TABLE", "Tabel verwijderen"],
["INSERT INTO / DELETE FROM", "Data manipuleren"],
["EXEC( / CAST( / CONVERT(", "Opgeslagen procedures of typeconversie misbruiken"],
["xp_cmdshell / xp_*", "SQL Server systeemcommando's uitvoeren"],
["OR 1=1 / ' --", "Authenticatie omzeilen via altijd-ware conditie"],
["/* commentaar */", "SQL-commentaar om filters te omzeilen"],
] as [$pattern, $explanation])
{{ $pattern }}{{ $explanation }}
@endforeach
{{-- XSS --}}
🔗 XSSType: xss
Cross-site scripting: de aanvaller injecteert JavaScript of HTML via de URL, in de hoop dat die code wordt uitgevoerd in de browser van een andere gebruiker.
@foreach ([
["<script", "Klassiek scripttag-injectie"],
["javascript: / vbscript:", "Protocol-gebaseerde scriptuitvoering"],
["data:text/html", "Inline HTML via data-URI"],
["onerror= / onload= / on*=", "HTML event handlers als aanvalsvector"],
["eval(", "JavaScript eval-uitvoering"],
["expression(", "IE-specifieke CSS expression injection"],
] as [$pattern, $explanation])
{{ $pattern }}{{ $explanation }}
@endforeach
{{-- Path traversal --}}
📂 PadtraversalType: traversal
Via herhaalde ../ probeert de aanvaller buiten de webroot te navigeren en systeembestanden te lezen
(bijv. /etc/passwd, configuratiebestanden).
@foreach ([
["../../", "Klassieke directoryescaping"],
["..\\ (backslash)", "Windows-variant van padtraversal"],
["%2e%2e%2f", "URL-geëncodeerde versie van ../"],
["%252e%252e", "Dubbel geëncodeerde variant (bypass-poging)"],
] as [$pattern, $explanation])
{{ $pattern }}{{ $explanation }}
@endforeach
{{-- Scanner probes --}}
🤖 ScannerprobeType: scanner
Geautomatiseerde scanners (zoals Shodan, Nuclei, Nikto) tasten servers af op bekende kwetsbare paden. Geen enkele van deze paden bestaat in ND-Link — elk verzoek ernaar is verdacht.
🔑 Brute forceBerekend op basis van HTTP 401/403 per IP
Een IP-adres dat ≥ 10 keer een 401 Unauthorized of 403 Forbidden ontvangt wordt als verdacht gemarkeerd.
Dit kan duiden op automatische wachtwoordraapaanvallen (credential stuffing) of op aftasten van afgeschermde pagina's.
≥ 10 weigeringen → alarm (laag risico)≥ 30 weigeringen → gemiddeld risico≥ 100 weigeringen → hoog risicoDrempel geldt per IP over de gekozen periode
{{-- Flood --}}
🌊 Verkeersoverlast (flood)Berekend op totaal verzoeken per IP per periode
Een IP-adres dat een abnormaal hoog volume verzoeken verstuurt kan duiden op een DDoS-aanval, agressieve webscraper of kapotte client.
Drempelwaarden per periode:
@endif
{{-- Brute force --}}
@if ($bruteForceAlarms->isNotEmpty())
🔑 Brute force / toegangspogingen
IP-adressen met ≥ 10 geweigerde verzoeken (HTTP 401/403). Dit kan duiden op herhaalde inlogpogingen of geautomatiseerde aanvallen op afgeschermde pagina's.
4xx = clientfout — verzoek is ongeldig of niet toegestaan (bijv. pagina niet gevonden, niet ingelogd, CSRF verlopen)5xx = serverfout — de server kon het verzoek niet verwerken (bijv. crash, configuratiefout)