4.3 KiB
Security-Richtlinien - Payload CMS Multi-Tenant
Letzte Aktualisierung: 29.12.2025
Übersicht
| Umgebung | URL | TRUST_PROXY |
|---|---|---|
| Production | https://cms.c2sgmbh.de | true (Nginx) |
| Staging | https://pl.porwoll.tech | true (Caddy) |
Security-Module
Alle Security-Funktionen in src/lib/security/:
| Modul | Datei | Zweck |
|---|---|---|
| Rate Limiter | rate-limiter.ts |
Schutz vor API-Missbrauch |
| IP Allowlist | ip-allowlist.ts |
IP-basierte Zugriffskontrolle |
| CSRF Protection | csrf.ts |
Cross-Site Request Forgery Schutz |
| Data Masking | data-masking.ts |
Sensitive Daten in Logs maskieren |
Rate Limiter
| Name | Limit | Fenster | Verwendung |
|---|---|---|---|
publicApiLimiter |
60 Requests | 1 Minute | Öffentliche API |
authLimiter |
5 Requests | 15 Minuten | Login-Versuche |
emailLimiter |
10 Requests | 1 Minute | E-Mail-Versand |
searchLimiter |
30 Requests | 1 Minute | Suche & Posts-API |
formLimiter |
5 Requests | 10 Minuten | Formular-Submissions |
Redis-Support: Automatischer Fallback auf In-Memory-Store.
IP Allowlist/Blocklist
WICHTIG: Hinter Reverse-Proxy (Caddy, Nginx) MUSS
TRUST_PROXY=truegesetzt werden!
| Variable | Zweck | Format |
|---|---|---|
TRUST_PROXY |
Proxy-Header vertrauen | true oder leer |
BLOCKED_IPS |
Globale Blocklist | IP, CIDR, Wildcard |
SEND_EMAIL_ALLOWED_IPS |
E-Mail-Endpoint | IP, CIDR, Wildcard |
ADMIN_ALLOWED_IPS |
Admin-Panel | IP, CIDR, Wildcard |
WEBHOOK_ALLOWED_IPS |
Webhook-Endpoint | IP, CIDR, Wildcard |
CSRF Protection
Pattern: Double Submit Cookie
Token-Endpoint: GET /api/csrf-token
WICHTIG: In Production MUSS
CSRF_SECREToderPAYLOAD_SECRETkonfiguriert sein.
Data Masking
Automatisch maskierte Felder: password, token, apiKey, secret, credentials, privateKey, smtpPassword
Pre-Commit Hook
ln -sf ../../scripts/detect-secrets.sh .git/hooks/pre-commit
Erkannte Patterns: API Keys, AWS Credentials, Private Keys, Passwörter, SMTP, DB Connection Strings, JWT, Webhook URLs.
CI/CD Security
| Job | Prüfung |
|---|---|
secrets |
Gitleaks Secret Scanning |
dependencies |
npm audit, Dependency Check |
codeql |
Static Code Analysis |
security-tests |
177 Security Unit & Integration Tests |
Test Suite
pnpm test:security # Alle Security-Tests
pnpm test:unit # Nur Unit-Tests
| Test-Datei | Tests | Bereich |
|---|---|---|
rate-limiter.unit.spec.ts |
24 | Limiter, Tracking, TRUST_PROXY |
csrf.unit.spec.ts |
34 | Token, Validierung, Origin |
ip-allowlist.unit.spec.ts |
35 | CIDR, Wildcards, TRUST_PROXY |
data-masking.unit.spec.ts |
41 | Felder, Patterns, Rekursion |
security-api.int.spec.ts |
33 | API-Integration |
Production Checklist
TRUST_PROXY=truesetzen (Pflicht hinter Reverse-Proxy)CSRF_SECREToderPAYLOAD_SECRETsetzenBLOCKED_IPSfür bekannte AngreiferSEND_EMAIL_ALLOWED_IPSauf vertrauenswürdige IPsADMIN_ALLOWED_IPSauf Office/VPN-IPs- Redis für verteiltes Rate Limiting
- Pre-Commit Hook aktivieren
Custom Login Route
Audit-Logging, Rate-Limiting (5/15min), Browser-Redirect, Multi-Content-Type Support.
Redirect-Validierung: Nur relative Pfade, externe URLs blockiert, Protocol-Handler abgelehnt.
Dateien
| Pfad | Beschreibung |
|---|---|
src/lib/security/rate-limiter.ts |
Rate Limiting |
src/lib/security/ip-allowlist.ts |
IP-Zugriffskontrolle |
src/lib/security/csrf.ts |
CSRF Token |
src/lib/security/data-masking.ts |
Data Masking |
src/app/(payload)/api/users/login/route.ts |
Custom Login |
scripts/detect-secrets.sh |
Pre-Commit Detection |
.github/workflows/security.yml |
CI Security |
tests/unit/security/ |
Unit Tests |
tests/int/security-api.int.spec.ts |
Integration Tests |
Änderungshistorie
| Datum | Änderung |
|---|---|
| 29.12.2025 | Custom Login Page Abschnitt entfernt |
| 17.12.2025 | Security-Audit Fixes: TRUST_PROXY, CSRF_SECRET, Tests auf 177 erweitert |
| 08.12.2025 | Security Test Suite (143 Tests) |
| 07.12.2025 | Rate Limiter, CSRF, IP Allowlist, Data Masking |