🛡️

Sicherheit von innen heraus Security from the inside out

Bei plate-software ist Sicherheit kein Feature — es ist das Fundament. Jede Code-Zeile durchläuft eine automatisierte Pipeline aus Tests, Security Reviews und Dependency Scanning, bevor sie jemals einen Server berührt. At plate-software, security isn't a feature — it's the foundation. Every line of code passes through an automated pipeline of tests, security reviews, and dependency scanning before it ever touches a server.

CI Pipeline: AktivCI Pipeline: Active 0 kritische CVEs0 critical CVEs Distroless RuntimeDistroless Runtime Self-HostedSelf-Hosted
Pipeline

Von Commit zu Production — automatisch abgesichert

From commit to production — automatically secured

Jeder Push durchläuft diese Pipeline. Kein manuelles Eingreifen, keine Shortcuts.

Every push runs through this pipeline. No manual intervention, no shortcuts.

📝 Push / PR Code-Einreichung Code submission
🧪 CI Tests Unit + Integration Unit + Integration
🔍 Security Review Automated + Manual Automated + Manual
👁️ Code Review Plan-basiert Plan-based
🚀 Deploy CI/CD Automated CI/CD Automated
Säulen der Sicherheit Security Pillars

Acht Schichten, ein Versprechen

Eight layers, one promise

Sicherheit ist kein einzelner Schritt — sie ist in jede Phase des Entwicklungszyklus eingebettet.

Security isn't a single step — it's embedded into every phase of the development lifecycle.

⚙️

CI/CD Pipeline Automated

Automatisierte Builds & Tests
Automated builds & tests

Jeder Commit wird automatisch gebaut und getestet — Backend (Java/Maven mit 113+ Tests) und Frontend (Next.js Production Build). Integrationstests mit PostgreSQL 18 in Testcontainern stellen sicher, dass Migrationen und Queries gegen eine echte Datenbank validiert werden.

Every commit is automatically built and tested — backend (Java/Maven with 113+ tests) and frontend (Next.js production build). Integration tests with PostgreSQL 18 in Testcontainers ensure migrations and queries are validated against a real database.

📦

Dependency Scanning npm audit

CVE-Erkennung & Patching
CVE detection & patching

npm audit läuft bei jedem Build. Kritische CVEs wie CVE-2025-66478 (Next.js RCE) werden am selben Tag identifiziert und gepatcht. Wir upgraden nicht nur auf die minimale Patch-Version, sondern auf die neueste stabile Version, um zukünftige Advisories vorzubauen.

npm audit runs on every build. Critical CVEs like CVE-2025-66478 (Next.js RCE) are identified and patched the same day. We don't just upgrade to the minimal patch version — we go to the latest stable to get ahead of future advisories.

🔒

Security Review Gate PASS/FAIL

Security Review vor Code Review
Security review before code review

Bevor Code gemergt wird, durchläuft er einen dedizierten Security Review gegen SEC-* Regeln und projektspezifische Patterns. Nur mit PASS-Ergebnis wird die funktionale Code Review gestartet. Security FAIL blockiert die Pipeline — keine Ausnahmen.

Before code is merged, it passes through a dedicated security review against SEC-* rules and project-specific patterns. Only with a PASS result does the functional code review begin. Security FAIL blocks the pipeline — no exceptions.

🔑

Authentication Layer OAuth + HMAC

plate-auth HMAC Exchange
plate-auth HMAC Exchange

Zweischichtige Authentifizierung: Google OAuth für die Benutzerauthentifizierung, plus ein HMAC-signierter Token-Exchange zwischen Frontend und Backend. Environment Variables werden beim Modul-Laden validiert (fail-fast) — eine fehlende Secret bringt den Build zum Absturz, nicht die Produktion.

Two-layer authentication: Google OAuth for user authentication, plus an HMAC-signed token exchange between frontend and backend. Environment variables are validated at module load (fail-fast) — a missing secret crashes the build, not production.

🐳

Container Security Distroless

Non-Root, Multi-Stage Builds
Non-root, multi-stage builds

Alle Container verwenden Distroless-Base-Images ohne Shell, ohne Package Manager, ohne Angriffsfläche. Multi-Stage Builds trennen Build-Tools von der Runtime. Der Container läuft als non-root User. Nur das standalone Binary und statische Assets erreichen die Produktion.

All containers use distroless base images — no shell, no package manager, no attack surface. Multi-stage builds separate build tools from runtime. The container runs as non-root user. Only the standalone binary and static assets reach production.

🗄️

Database Integrity PostgreSQL

Migrationen, IDOR-Schutz, Constraints
Migrations, IDOR protection, constraints

Schema-Änderungen ausschließlich über Flyway-Migrationen mit Versionskontrolle. PostgreSQL IMMUTABLE-Constraints verhindern illegale Index-Predicates. Cross-Tenant IDOR wird durch automatische Integrationstests verifiziert — kein User kann jemals Daten einer anderen Organisation sehen.

Schema changes exclusively through version-controlled Flyway migrations. PostgreSQL IMMUTABLE constraints prevent illegal index predicates. Cross-tenant IDOR is verified by automated integration tests — no user can ever see another organization's data.

🤫

Secrets Management Gitea Actions

Keine Hardcoded Secrets, nie
No hardcoded secrets, ever

Alle Secrets liegen in Gitea Actions Encrypted Secrets — nie im Code, nie in Dockerfiles, nie in docker-compose. CI/CD referenziert sie über ${{ secrets.* }}. Der GITEA_-Prefix ist reserviert und wird vom System abgelehnt — ein zusätzliches Sicherheitsnetz gegen Fehlkonfiguration.

All secrets live in Gitea Actions encrypted secrets — never in code, never in Dockerfiles, never in docker-compose. CI/CD references them via ${{ secrets.* }}. The GITEA_ prefix is reserved and rejected by the system — an additional safety net against misconfiguration.

🏠

Self-Hosted Infrastructure No Cloud

Quellcode unter eigener Kontrolle
Source code under our control

Der gesamte Quellcode liegt auf einem selbst gehosteten Gitea-Server im Homelab. Kein Cloud-Anbieter hat Zugriff auf den Code, die CI-Pipeline oder die Secrets. Backups werden verschlüsselt auf einem separaten TrueNAS-Storage gepflegt. vendor-Lock-in: null.

All source code lives on a self-hosted Gitea server in the homelab. No cloud provider has access to the code, the CI pipeline, or the secrets. Backups are maintained encrypted on a separate TrueNAS storage. Vendor lock-in: zero.

Kenndaten Metrics

Sicherheit in Zahlen

Security by the numbers

0
Kritische CVEs (offen)
Critical CVEs (open)
113+
Automatisierte Tests
Automated tests
< 24h
CVE Response Time
CVE Response Time
100%
PRs mit Security Review
PRs with security review
8
Security-Schichten
Security layers

🤝 Unser SicherheitsversprechenOur security commitment

  • Fail-fast, not fail-silent: Fehlende Secrets und invalide Konfigurationen bringen den Build zum Absturz — nicht die Produktion.Fail-fast, not fail-silent: Missing secrets and invalid configurations crash the build — not production.
  • Defense in Depth: Auth, IDOR-Schutz, Container-Isolation und Database-Constraints arbeiten unabhängig voneinander.Defense in depth: Auth, IDOR protection, container isolation, and database constraints work independently.
  • Keine manuellen Deploys: Jede Änderung erreicht die Produktion ausschließlich über die CI/CD-Pipeline.No manual deploys: Every change reaches production exclusively through the CI/CD pipeline.
  • Versionierte Migrationen: Datenbankschema-Änderungen sind versioniert, getestet und rollback-fähig.Versioned migrations: Database schema changes are versioned, tested, and rollback-capable.
  • Transparenz: Sicherheitsrelevante Änderungen werden in PRs dokumentiert mit Root-Cause-Analysis.Transparency: Security-relevant changes are documented in PRs with root cause analysis.
  • Selbst gehostet: Keine Abhängigkeit von Cloud-Anbietern für Quellcode, CI/CD oder Secrets.Self-hosted: No cloud provider dependency for source code, CI/CD, or secrets.