Security: Server-seitige Input-Validierung & Body-Size-Limit #67
Labels
No labels
block-planning
bug
documentation
duplicate
enhancement
feature
good first issue
help wanted
infrastructure
invalid
planning
priority:high
priority:low
question
refactoring
status:backlog
status:done
status:in-progress
status:todo
tech-decision
test
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: bollwerkadmin/bollwerk#67
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Analyse der Server-Routen hat fünf Sicherheits-/Stabilitätslücken aufgedeckt. Kein SQL-Injection-Risiko (Exposed ORM mit parametrisierten Queries), aber fehlende Input-Validierung kann zu DoS und unkontrollierten Server-Fehlern führen.
Findings (Priorität absteigend)
🔴 1. Kein Request-Body-Größenlimit (DoS)
Ktor hat kein \maxBodySize\ konfiguriert. Ein authentifizierter User kann ein \PUT /api/inventory\ mit beliebig großen Payloads senden → OOM auf dem VPS (1 GB RAM).
🟠 2. Keine String-Längenvalidierung (Server-Fehler 500 statt 400)
Strings werden ohne Längenprüfung an die DB weitergegeben. Exposed wirft bei Überschreitung eine ungefangene Exception → HTTP 500.
epository.saveInventory(), \patchItem()\ und \userRepository.create()\
🟠 3. \expiryDate\ Format nicht validiert
Beliebige Strings werden in das \archar(10)-Feld gespeichert – kein Regex/Parse-Check für \YYYY-MM-DD.
🟡 4. Keine Array-Größenbeschränkung (DoS)
\PUT /api/inventory\ akzeptiert beliebig viele Items/Kategorien/Orte in einem Request.
🟡 5. Settings-Keys unvalidiert
Beliebige Keys können gespeichert werden. Kein Whitelist-Check.
Akzeptanzkriterien
Abgeschlossen (2026-05-17)
Zyklen: 1
Tests: ✅ 16 neue Tests, 532 gesamt, 0 Fehler
Implementierte Artefakte