mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 18:34:13 +00:00
docs(security): update with custom login page and redirect validation
- Add environment table (Production/Staging URLs with TRUST_PROXY) - Document browser form redirect with safe URL validation - Add Open Redirect Prevention details - Document custom admin login page (src/app/(payload)/admin/login/) - Add file reference table for all security-related files - Update changelog with 18.12.2025 entry 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
ba0f37a5b2
commit
624b3dc605
1 changed files with 58 additions and 1 deletions
|
|
@ -1,11 +1,18 @@
|
||||||
# Security-Richtlinien - Payload CMS Multi-Tenant
|
# Security-Richtlinien - Payload CMS Multi-Tenant
|
||||||
|
|
||||||
> Letzte Aktualisierung: 17.12.2025
|
> Letzte Aktualisierung: 18.12.2025
|
||||||
|
|
||||||
## Übersicht
|
## Übersicht
|
||||||
|
|
||||||
Dieses Dokument beschreibt die implementierten Sicherheitsmaßnahmen für das Payload CMS Multi-Tenant-Projekt.
|
Dieses Dokument beschreibt die implementierten Sicherheitsmaßnahmen für das Payload CMS Multi-Tenant-Projekt.
|
||||||
|
|
||||||
|
**Umgebungen:**
|
||||||
|
|
||||||
|
| Umgebung | URL | TRUST_PROXY |
|
||||||
|
|----------|-----|-------------|
|
||||||
|
| Production | https://cms.c2sgmbh.de | `true` (Nginx) |
|
||||||
|
| Staging | https://pl.porwoll.tech | `true` (Caddy) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Security-Module
|
## Security-Module
|
||||||
|
|
@ -289,16 +296,48 @@ Das Admin Panel verwendet eine Custom Login Route (`src/app/(payload)/api/users/
|
||||||
|
|
||||||
- **Audit-Logging:** Jeder Login-Versuch wird in AuditLogs protokolliert
|
- **Audit-Logging:** Jeder Login-Versuch wird in AuditLogs protokolliert
|
||||||
- **Rate-Limiting:** 5 Versuche pro 15 Minuten (authLimiter)
|
- **Rate-Limiting:** 5 Versuche pro 15 Minuten (authLimiter)
|
||||||
|
- **Browser-Redirect:** Sichere Weiterleitung nach erfolgreichem Login
|
||||||
- **Content-Type Support:**
|
- **Content-Type Support:**
|
||||||
- JSON (`application/json`)
|
- JSON (`application/json`)
|
||||||
- FormData mit `_payload` JSON-Feld (Payload Admin Panel Format)
|
- FormData mit `_payload` JSON-Feld (Payload Admin Panel Format)
|
||||||
- Standard FormData (`multipart/form-data`)
|
- Standard FormData (`multipart/form-data`)
|
||||||
- URL-encoded (`application/x-www-form-urlencoded`)
|
- URL-encoded (`application/x-www-form-urlencoded`)
|
||||||
|
|
||||||
|
**Browser Form Redirect:**
|
||||||
|
```
|
||||||
|
POST /api/users/login?redirect=/admin/collections/posts
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
|
||||||
|
email=admin@example.com&password=secret
|
||||||
|
```
|
||||||
|
|
||||||
|
**Redirect-Validierung:**
|
||||||
|
- Nur relative Pfade erlaubt (`/admin/...`)
|
||||||
|
- Externe URLs werden blockiert
|
||||||
|
- Protocol-Handler (`javascript:`, `data:`) abgelehnt
|
||||||
|
- Default: `/admin` bei fehlendem/ungültigem Redirect
|
||||||
|
|
||||||
**Sicherheitsaspekte:**
|
**Sicherheitsaspekte:**
|
||||||
- Passwort wird nie in Logs/Responses exponiert
|
- Passwort wird nie in Logs/Responses exponiert
|
||||||
- Fehlgeschlagene Login-Versuche werden mit IP und User-Agent geloggt
|
- Fehlgeschlagene Login-Versuche werden mit IP und User-Agent geloggt
|
||||||
- Rate-Limiting verhindert Brute-Force-Angriffe
|
- Rate-Limiting verhindert Brute-Force-Angriffe
|
||||||
|
- Open Redirect Prevention durch URL-Validierung
|
||||||
|
|
||||||
|
### Custom Admin Login Page
|
||||||
|
|
||||||
|
Eine optionale Custom Login-Seite ist verfügbar unter `src/app/(payload)/admin/login/`:
|
||||||
|
|
||||||
|
```
|
||||||
|
src/app/(payload)/admin/login/
|
||||||
|
├── page.tsx # Login-Formular mit Styling
|
||||||
|
└── page.module.scss # Custom Styles
|
||||||
|
```
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
- Styled Login-Form passend zum Admin-Theme
|
||||||
|
- Redirect-Parameter Support (`?redirect=/admin/...`)
|
||||||
|
- Fehlerbehandlung mit User-Feedback
|
||||||
|
- Kompatibel mit Payload's Session-Management
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -306,8 +345,26 @@ Das Admin Panel verwendet eine Custom Login Route (`src/app/(payload)/api/users/
|
||||||
|
|
||||||
| Datum | Änderung |
|
| Datum | Änderung |
|
||||||
|-------|----------|
|
|-------|----------|
|
||||||
|
| 18.12.2025 | **Custom Admin Login Page:** Styled Login-Formular, Browser-Redirect mit Safe-URL-Validierung, Open Redirect Prevention |
|
||||||
| 17.12.2025 | **Security-Audit Fixes:** TRUST_PROXY für IP-Header-Spoofing, CSRF_SECRET Pflicht in Production, IP-Allowlist Startup-Warnungen, Tests auf 177 erweitert |
|
| 17.12.2025 | **Security-Audit Fixes:** TRUST_PROXY für IP-Header-Spoofing, CSRF_SECRET Pflicht in Production, IP-Allowlist Startup-Warnungen, Tests auf 177 erweitert |
|
||||||
| 09.12.2025 | Custom Login Route Dokumentation, multipart/form-data _payload Support |
|
| 09.12.2025 | Custom Login Route Dokumentation, multipart/form-data _payload Support |
|
||||||
| 08.12.2025 | Security Test Suite (143 Tests) |
|
| 08.12.2025 | Security Test Suite (143 Tests) |
|
||||||
| 07.12.2025 | Rate Limiter, CSRF, IP Allowlist, Data Masking |
|
| 07.12.2025 | Rate Limiter, CSRF, IP Allowlist, Data Masking |
|
||||||
| 07.12.2025 | Pre-Commit Hook, GitHub Actions Workflow |
|
| 07.12.2025 | Pre-Commit Hook, GitHub Actions Workflow |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dateien
|
||||||
|
|
||||||
|
| Pfad | Beschreibung |
|
||||||
|
|------|--------------|
|
||||||
|
| `src/lib/security/rate-limiter.ts` | Rate Limiting mit Redis/Memory |
|
||||||
|
| `src/lib/security/ip-allowlist.ts` | IP-basierte Zugriffskontrolle |
|
||||||
|
| `src/lib/security/csrf.ts` | CSRF Token Generation & Validation |
|
||||||
|
| `src/lib/security/data-masking.ts` | Sensitive Data Masking |
|
||||||
|
| `src/app/(payload)/api/users/login/route.ts` | Custom Login API |
|
||||||
|
| `src/app/(payload)/admin/login/page.tsx` | Custom Login Page |
|
||||||
|
| `scripts/detect-secrets.sh` | Pre-Commit Secret Detection |
|
||||||
|
| `.github/workflows/security.yml` | CI Security Scanning |
|
||||||
|
| `tests/unit/security/` | Security Unit Tests |
|
||||||
|
| `tests/int/security-api.int.spec.ts` | Security Integration Tests |
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue