Block a user
[Security] DOM-XSS via innerHTML mit User-Inputs (Dateinamen, Browse)
[Security] IDOR: Job- und ZIP-IDs nicht an Session gebunden
[Security] IDOR: Job- und ZIP-IDs nicht an Session gebunden
Fix umgesetzt in server.py:
- Helper
_request_token(request)extrahiert Bearer-Token (odernoauthbei deaktiviertem APP_PASSWORD) _check_owner(owner, request)-> 403 bei Mismatch -…
[Security] Auth-Hardening: Timing-Attack, fehlendes Rate-Limit
[Security] Auth-Hardening: Timing-Attack, fehlendes Rate-Limit
Fix umgesetzt in server.py:
secrets.compare_digest()fuer Passwort-Vergleich- In-Memory-Rate-Limit: max. 5 Versuche/Minute pro IP, sonst HTTP 429
Manueller Test: 5 falsche Versuche -> 6.…
[Quality] Logging-Infrastruktur + bare except eliminieren
[Quality] HTTP-Status-Codes vereinheitlichen + Job-Dict typisieren
[Quality] DRY: Tempdir-Validation und Extension-Listen zentralisieren
[Bug] Silent Failures: AI ohne Key, HEIC ohne pillow-heif, Export-Skips
[Security] /browse und /move ohne Pfad-Sandboxing
[Security] DOM-XSS via innerHTML mit User-Inputs (Dateinamen, Browse)
[Security] IDOR: Job- und ZIP-IDs nicht an Session gebunden
[Perf/UX] Frontend: Polling-Backoff, Virtualisierung, Memo
[Perf] Thumbnail-Endpoint + pHash/EXIF-Cache
[Perf] Bilder werden 2-3x pro Bild dekodiert in analyze_folder
[Bug] /download loescht Quelle auch bei fehlgeschlagenem ZIP-Schreiben
[Security] CORS, Security-Header, Token-Speicherung
[Bug] Pillow-Resource-Leak: Image.open() ohne with-Statement
[Bug] Unbounded _jobs-Dict + Race in /export/download vs Cleanup
[Security] Auth-Hardening: Timing-Attack, fehlendes Rate-Limit