feat(R4b): reproducible builds — pin requirements.lock checksum

- Dockerfile: build-arg REQUIREMENTS_CHECKSUM verifica lo sha256 del
  lockfile (fallisce la build se non coincide; vuoto = skip locale)
- docker-compose.yml: default = hash corrente del lock
- CI: nuovo job checksum.yml che fallisce se il pin non coincide
- Fix YAML preesistente in ci.yml (name: con ':' non quotati)
- Docs: README, .env.example, review aggiornati
This commit is contained in:
truetype committed 2026-08-29 22:36:31 +02:00
1 parent 0f15b7958f
commit 12d2018ac5
7 files changed
+78 -10

No files matched your search

+8 -6
View File
@@ -21,8 +21,9 @@ vanno chiuse prima di considerare il progetto "pronto" per un uso reale.
Esito revisione: **❌ non pronta per produzione — servono correzioni**.
> Aggiornamento (sessione corrente): la P0 è chiusa (**R1, R2, R3, R6**) e
> parte della P1 (**R4** lock + **CI** smoke test + **self-host JS offline**).
> Restano P1 R4b e P2 (R5, R7).
> parte della P1 (**R4** lock + **CI** smoke test + **self-host JS offline** +
> **R4b** checksum lock nel Dockerfile/CI).
> Restano P2 (R5, R7).
---
@@ -227,10 +228,10 @@ rimosse, trust proxy ristretto via env.
| R1 | Reader 404 su file convertiti | Alta | Alta | ✅ risolto |
| R2 | Disk/CPU DoS via upload non autenticato | Alta | Media | ✅ mitigato (auth+rate) |
| R3 | XSS da file HTML malevoli | Alta | Bassa | ✅ mitigato (CSP+DOMPurify) |
| R4 | Build non riproducibile | Media | Media | ✅ lockfile |
| R4 | Build non riproducibile | Media | Media | ✅ lockfile + checksum pinned |
| R5 | Errori timeout conversioni lunghe | Media | Media | ⏳ P2 |
| R6 | Trust proxy / opzioni fantasma | Bassa | Media | ✅ risolto |
| R7 | /tmp tmpfs vs conversioni grandi | Bassa | Bassa | ⏳ P1 |
| R7 | /tmp tmpfs vs conversioni grandi | Bassa | Bassa | ⏳ P2 |
---
@@ -247,8 +248,9 @@ rimosse, trust proxy ristretto via env.
✅ `requirements.lock` (pip-compile, 112 righe) + Dockerfile lo usa.
- [x] Self-hosting dei JS frontend (per offline).
✅ epub.js/pdf.js+worker/JSZip vendored in `static/vendor/`, CSP senza CDN.
- [ ] **R4b** `git` revision pin nel Dockerfile build-arg `--build-arg
requirements_checksum` (advanced).
- [x] **R4b** Hash del lockfile pinnato nel Dockerfile (build-arg
`REQUIREMENTS_CHECKSUM`, default in compose) + job CI di verifica
(`.github/workflows/checksum.yml`). ✅ fatto
- [x] **R6** Cleanup gunicorn.conf (opzioni inesistenti; `forwarded_allow_ips`
solo per proxy fidato noto). ✅ già fatto
- [x] Smoke test Docker nella CI (`docker build` + `docker compose up` +