server.py:294-311, server.py:466-476, server.py:478-497
server.py:294-311
server.py:466-476
server.py:478-497
Job-Status- und Download-Endpoints pruefen nur die Existenz der ID, nicht den Besitzer:
@app.get("/export/download/{zip_id}") def export_download(zip_id: str): zip_path = _zip_store.get(zip_id)
Jeder authentifizierte Nutzer (mit APP_PASSWORD="" sogar jeder) kann beliebige UUIDs abrufen.
APP_PASSWORD=""
Beim Anlegen Owner-Token speichern und im Status/Download vergleichen:
_jobs[job_id] = {"status": "running", "owner": token, ...} _zip_store[zip_id] = {"path": ..., "owner": token}
Fix umgesetzt in server.py:
server.py
_request_token(request)
noauth
_check_owner(owner, request)
/analyze
/export
owner
/analyze/status
/export/status
/export/download
_zip_store
{zip_id: {path, owner}}
Manueller Test mit zwei verschiedenen Tokens: 403 fuer fremden Job, 200 fuer eigenen.
No dependencies set.
The note is not visible to the blocked user.
Problem
server.py:294-311,server.py:466-476,server.py:478-497Job-Status- und Download-Endpoints pruefen nur die Existenz der ID, nicht den Besitzer:
Jeder authentifizierte Nutzer (mit
APP_PASSWORD=""sogar jeder) kann beliebige UUIDs abrufen.Fix
Beim Anlegen Owner-Token speichern und im Status/Download vergleichen:
Fix umgesetzt in
server.py:_request_token(request)extrahiert Bearer-Token (odernoauthbei deaktiviertem APP_PASSWORD)_check_owner(owner, request)-> 403 bei Mismatch/analyze,/exportspeichernownerim Job-Dict/analyze/status,/export/status,/export/downloadpruefen Owner_zip_storejetzt{zip_id: {path, owner}}statt nackter PfadManueller Test mit zwei verschiedenen Tokens: 403 fuer fremden Job, 200 fuer eigenen.