Zum Inhalt springen

Sicherheit

API-Sicherheitsnachweis

Dokumentation der Sicherheitsarchitektur aller öffentlichen API-Endpoints der Resilience Platform. Transparent, prüfbar und DORA-konform.

Hinweis: Dieses Dokument dient als Nachweis der API-Sicherheitsarchitektur für Aufsichtsprüfungen, Kunden-Assessments und interne Revision.

1. API-Endpoints

Methode Pfad Auth Rate Limit Beschreibung
GET /api/health Keine 60/min Health Check (DB + Cache). Gibt JSON mit PHP-Version, Laravel-Version, Environment, DB-Status, Cache-Status zurück.
GET /api/ping Keine 60/min Minimaler Uptime-Check. Gibt "pong" als text/plain zurück.
GET /exports/* Keine 60/min 17 Export-Endpoints (CSV, JSON, ICS, PDF) mit SHA-256-Integritätsheader. Keine personenbezogenen Daten.
GET /exports/registry Keine 60/min Artifact Registry: JSON-Array aller generierten Exporte mit Metadaten und SHA-256.
GET /sitemap.xml Keine 60/min Dynamisch generierte XML-Sitemap mit 260+ URLs.
GET /api/errors Token 30/min Error-Report-API für Paperclip-Monitoring. Nur mit gültigem API-Token zugänglich.

2. Security Headers

Jede HTTP-Response enthält folgende Security-Header:

Header Wert Zweck
X-Artifact-SHA256 SHA-256-Hash des Export-Inhalts Ermöglicht Integritätsprüfung der heruntergeladenen Datei. Vergleich mit eigenem SHA-256-Hash.
X-Content-Type-Options nosniff Verhindert MIME-Type-Sniffing durch Browser (OWASP-Empfehlung).
X-Frame-Options SAMEORIGIN Verhindert Clickjacking durch Einbettung in fremde Frames.
Strict-Transport-Security max-age=31536000; includeSubDomains HSTS für 12 Monate mit Subdomains. Erzwingt HTTPS.
Content-Security-Policy default-src 'self'; script-src 'self' 'nonce-{random}' 'strict-dynamic'; style-src 'self' 'unsafe-inline' CSP mit Nonce-basiertem Script-Hashing. Keine externen Scripts.
Referrer-Policy strict-origin-when-cross-origin Sendet Referrer nur bei same-origin. Begrenzt Datenleckage.
Permissions-Policy camera=(), microphone=(), geolocation=(), interest-cohort=() Deaktiviert alle Browser-Features, die nicht benötigt werden.

3. Sicherheitskontrollen

Umgesetzt AMS-001

Authentifizierung

Öffentliche APIs benötigen keine Authentifizierung (Health, Ping, Exports, Sitemap). Error-API ist Token-geschützt. Admin- und App-Routen via Laravel Fortify mit 2FA.

Umgesetzt AMS-002

Rate Limiting

Globale Ratenbegrenzung auf 60 Requests/Minute pro IP für öffentliche Endpoints. Error-API: 30/Minute.

Umgesetzt AMS-003

Input-Validierung

Alle Inputs werden durch Laravel Middleware validiert (TrimStrings, ConvertEmptyStringsToNull, ValidatePostSize, ValidatePathEncoding).

Umgesetzt AMS-004

OWASP Upload Security

OwaspUploadSecurity Middleware: Extension-Whitelist, MIME-Detection via finfo, Double-Extension-Rejection, Null-Byte-Detection, 10MB-Limit, Auth-only.

Umgesetzt AMS-005

Integrität

Alle Exporte erhalten X-Artifact-SHA256-Header. Artifact Registry speichert SHA-256, Version und Timestamp jedes Exports.

Umgesetzt AMS-006

Datenminimierung

Keine personenbezogenen Daten in Exporten. Keine Secrets in Responses. Keine Stacktraces in Produktion (APP_DEBUG=false).

Umgesetzt AMS-007

Transportverschlüsselung

TLS 1.3. HSTS für 12 Monate. SMTP für Newsletter via Plesk mit DKIM-Signatur (psa12.webhoster.ag:587, TLS).

Umgesetzt AMS-008

CSP & Security Headers

Content-Security-Policy mit Nonce + strict-dynamic. X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy.

Umgesetzt AMS-009

Fehlerbehandlung

Branded 404/500/503 Error Pages ohne Stacktraces. Strukturierte Fehlerprotokollierung via Paperclip Error Monitor.

Umgesetzt AMS-010

Logging & Monitoring

StructuredErrorHandler für JSON-Fehlerprotokollierung. /api/health für externes Monitoring. Paperclip Health Guardian Routine (alle 30 Min.).

4. Integritätsprüfung

Jeder Export-Download enthält einen X-Artifact-SHA256-Header. Der SHA-256-Hash kann zur Integritätsprüfung verwendet werden:

# Download und Hash-Vergleich curl -sI https://resilience.amartens.com/exports/measures/csv | grep X-Artifact-SHA256 # X-Artifact-SHA256: cc1f0c2ab22aa24c467ce85234afefb3bb8336db99a98a6edc03a4e006ae4a06 curl -s https://resilience.amartens.com/exports/measures/csv | sha256sum # cc1f0c2ab22aa24c467ce85234afefb3bb8336db99a98a6edc03a4e006ae4a06 -

Die Artifact Registry (/exports/registry) speichert zusätzlich Version, Timestamp und Dateigröße jedes Exports für Audit-Zwecke.

5. Regelkonformität

DORA

Art. 8, 9, 24, 25, 28

OWASP

ASVS, API Top 10, Upload Security

ISO 27001

A.8.1, A.8.2, A.8.5, A.8.20, A.5.33

Re-Test 07.06.2026

7. OWASP Top 10 Mapping — 100% (33/33)

33/33

OWASP Checks

10/10

Kategorien

100%

Compliance

+5

Verbessert seit 06.06.

Verbesserungen seit letztem Audit: XSS-Schutz (+Pre-Commit-Hook), Rate-Limiting (API-Key-basiert), Logging/Monitoring (Auto-Heal, Dependency Audit, Vulnerability Scan), Sensitive Data Exposure (Audit-Trail).

OWASP Top 10 — Detail

SQL Injection🟢 3/3 — Eloquent ORM, Prepared Statements
CSRF🟢 3/3 — , Middleware, API excluded
XSS🟢 3/3 — Blade auto-escape, CSP nonce+strict-dynamic, Pre-Commit-Hook
Broken Access Control🟢 3/3 — Fortify, Policies, API-Key Middleware
Mass Assignment🟢 3/3 — $fillable, Form Requests
Security Misconfiguration🟢 4/4 — APP_DEBUG=false, 7 Security-Headers, CSP
Sensitive Data Exposure🟢 3/3 — HTTPS/HSTS, bcrypt, Audit-Trail
File Upload Risks🟢 3/3 — OWASP-Middleware, MIME-Validation, SHA-256
Rate Limiting🟢 4/4 — 60/min per Key, Burst, 429, Token-Protected
Logging & Monitoring🟢 4/4 — Daily Logs, Paperclip, Health Guardian, Auto-Heal, Vuln Scan, Deps Audit

ISO 27001:2022 Annex A — Erfüllte Controls

A.5.1 Policies A.5.15 Access Control A.5.17 Authentication A.5.24 Monitoring A.5.29 Data Protection A.5.33 Incident Mgmt A.8.8 Vulnerability Mgmt A.8.16 SIEM

TLS-Zertifikat

✅ TLS 1.3 aktiv · Zertifikat gültig bis 30.07.2026 (52 Tage) · Aussteller: Let's Encrypt