ferdi2go closed issue ferdi2go/OnlyFrames#22 2026-05-27 13:10:55 +02:00
[Perf] Bilder werden 2-3x pro Bild dekodiert in analyze_folder
ferdi2go closed issue ferdi2go/OnlyFrames#21 2026-05-27 13:08:48 +02:00
[Bug] Silent Failures: AI ohne Key, HEIC ohne pillow-heif, Export-Skips
ferdi2go commented on issue ferdi2go/OnlyFrames#21 2026-05-27 13:08:47 +02:00
[Bug] Silent Failures: AI ohne Key, HEIC ohne pillow-heif, Export-Skips

Fix in drei Teilen umgesetzt:

a) AI-Phase

  • _run_analyze_job prueft API-Key vor Phase 4 (leer / Platzhalter your_* / Laenge < 30)
  • ai_skipped-Feld im Status-Result mit klarer…
ferdi2go commented on issue ferdi2go/OnlyFrames#20 2026-05-27 13:04:49 +02:00
[Bug] /download loescht Quelle auch bei fehlgeschlagenem ZIP-Schreiben

Fix umgesetzt in server.py:download_kept:

  • Erwartete Dateiliste vor ZIP-Erstellung gesammelt
  • Pro Datei zf.write in try/except: Fehler werden gesammelt, nicht geschluckt
  • shutil.rmtree…
ferdi2go closed issue ferdi2go/OnlyFrames#20 2026-05-27 13:04:49 +02:00
[Bug] /download loescht Quelle auch bei fehlgeschlagenem ZIP-Schreiben
ferdi2go closed issue ferdi2go/OnlyFrames#19 2026-05-27 13:03:33 +02:00
[Bug] Unbounded _jobs-Dict + Race in /export/download vs Cleanup
ferdi2go commented on issue ferdi2go/OnlyFrames#19 2026-05-27 13:03:33 +02:00
[Bug] Unbounded _jobs-Dict + Race in /export/download vs Cleanup

Fix umgesetzt in server.py:

(a) Jobs-TTL

  • Job-Dict bekommt jetzt created_at beim Anlegen (/analyze, /export)
  • Background-Thread _cleanup_jobs purged Jobs aelter als `_JOB_TTL =…
ferdi2go closed issue ferdi2go/OnlyFrames#18 2026-05-27 13:01:44 +02:00
[Bug] Pillow-Resource-Leak: Image.open() ohne with-Statement
ferdi2go commented on issue ferdi2go/OnlyFrames#18 2026-05-27 13:01:44 +02:00
[Bug] Pillow-Resource-Leak: Image.open() ohne with-Statement

Fix umgesetzt:

  • analyzer.py:_mean_brightness -> with Image.open(...)
  • analyzer.py:find_duplicates -> with Image.open(...) as img: phash(img)
  • processor.py:get_exif_info -> `with…
ferdi2go commented on issue ferdi2go/OnlyFrames#17 2026-05-27 12:59:40 +02:00
[Security] CORS, Security-Header, Token-Speicherung

Fix (a) und (b) umgesetzt in server.py:

CORS — statt allow_origins=["*"] jetzt allow_origin_regex fuer localhost, 127.0.0.1 und lxc<id>-<port>.<domain> (VCH Subdomain-Proxy).…

ferdi2go closed issue ferdi2go/OnlyFrames#17 2026-05-27 12:59:40 +02:00
[Security] CORS, Security-Header, Token-Speicherung
ferdi2go opened issue ferdi2go/OnlyFrames#28 2026-05-27 12:59:30 +02:00
[Security] Token in HttpOnly+SameSite-Cookie statt sessionStorage
ferdi2go closed issue ferdi2go/OnlyFrames#16 2026-05-27 12:52:37 +02:00
[Security] /browse und /move ohne Pfad-Sandboxing
ferdi2go commented on issue ferdi2go/OnlyFrames#16 2026-05-27 12:52:37 +02:00
[Security] /browse und /move ohne Pfad-Sandboxing

Fix umgesetzt in server.py:

  • BROWSE_ROOT = "/home/vchuser" als Sandbox
  • /browse lehnt Pfade ausserhalb mit 403 ab, parent ist None an der Wurzel
  • /move prueft jetzt `tempfile.gettemp…
ferdi2go commented on issue ferdi2go/OnlyFrames#15 2026-05-27 12:32:37 +02:00
[Security] DOM-XSS via innerHTML mit User-Inputs (Dateinamen, Browse)

Fix umgesetzt in index.html:

  • Upload-Liste (Z.1049 alt): row via createElement + textContent, kein Template-String mit User-Input
  • Folder-Browser-Item (Z.1139 alt): textContent statt…
ferdi2go closed issue ferdi2go/OnlyFrames#15 2026-05-27 12:32:37 +02:00
[Security] DOM-XSS via innerHTML mit User-Inputs (Dateinamen, Browse)
ferdi2go closed issue ferdi2go/OnlyFrames#14 2026-05-27 12:30:09 +02:00
[Security] IDOR: Job- und ZIP-IDs nicht an Session gebunden
ferdi2go commented on issue ferdi2go/OnlyFrames#14 2026-05-27 12:30:09 +02:00
[Security] IDOR: Job- und ZIP-IDs nicht an Session gebunden

Fix umgesetzt in server.py:

  • Helper _request_token(request) extrahiert Bearer-Token (oder noauth bei deaktiviertem APP_PASSWORD)
  • _check_owner(owner, request) -> 403 bei Mismatch -…
ferdi2go commented on issue ferdi2go/OnlyFrames#13 2026-05-27 12:25:47 +02:00
[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.…

ferdi2go closed issue ferdi2go/OnlyFrames#13 2026-05-27 12:25:47 +02:00
[Security] Auth-Hardening: Timing-Attack, fehlendes Rate-Limit