Password del capoturno forzabile: /authorise /pause /resume /close fuori dal limite di login #8
Reference in New Issue
Block a user
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?
GRAVITÀ: alta
FILE: src/backend/api/routers/measurements.py:99 ; src/backend/api/routers/production.py:118,134,150 ; src/backend/api/middleware/rate_limit.py:25,101
COSA: il limite di login vale solo per il path esatto
/api/auth/login(==). Le credenziali del supervisore passano da altri quattro endpoint, senza blocco account né log dedicato. Qualunque utente autenticato può provarle al ritmo del limite generale (e senza limite, con l'issue sul rate limit).INPUT: ciclo di
POST /api/production-runs/{id}/pausecon password diverse.VERIFICATO: script pytest → 40 tentativi consecutivi su /authorise, nessun 429.
ORIGINE: revisione fable del 21/09/2026 su ramo
V3.0.0, commit8cc5e82. Documento completo:_output/2026-09-21-TieMeasureFlow-revisione.mdsu Wasabi.⚡ jeeg — preso in carico 2026-09-21T20:22:16Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI (passo 1) — ramo
lavoro/jeeg, worktree~/lavoro/TieMeasureFlowsu jeeg, lotto A2MODIFICHE: src/backend/api/middleware/rate_limit.py — il secchio «login» vale per
/api/auth/loginE per i path che portano credenziali del supervisore:/api/measurements/*/authorise(verifica il path reale in src/backend/api/routers/measurements.py:99) e/api/production-runs/{id}/pause|resume|close. Usa un match per suffisso/regex, non==. In più, in src/backend/services/auth_service.py (funzione che verifica le credenziali del supervisore, ~riga 43): logga a WARNING ogni credenziale di supervisore sbagliata con username e path.TEST: 6 POST /pause con password sbagliata dallo stesso IP → il sesto 429.
NON TOCCARE: routers/production.py e routers/measurements.py (lotto A1/A3).
Soluzione
ESITO: fatto
COSA: Il secchio «login» del rate limit copre anche
/api/measurements/{id}/authorise,/api/production-runs/{id}/pause|resume|closee/api/setup/*(regex, non==). Credenziali di supervisore sbagliate loggate a WARNING. Test: sesto POST /pause → 429.COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a
d483fa1):e91ef73PROVA:
uv run --extra server --extra client --extra dev pytest -q→ 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).