From 60a090fe023252e8f9e8770ed8465897d558b60a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pasternak?= Date: Sun, 12 Jul 2026 19:45:19 +0200 Subject: [PATCH] security(deploy): nginx client_max_body_size 100M -> 120M Legalny maks zgloszenia publikacji to 5 x 20 MiB = 104857600 B = DOKLADNIE 100 MiB samych plikow (walidatory app-layer MAX_ROZMIAR_PLIKU/MAX_LICZBA_PLIKOW, bpp PR #551), a dawny cap 100M (== 100 MiB) nie zostawial ani bajta na narzut multipart (granice, naglowki per-part, pola formsetu autorow, CSRF) -> najwieksze POPRAWNE zgloszenie dostawaloby 413 zanim dotrze do Django. 120M daje ~20 MiB zapasu bez istotnego oslabienia bariery (nadal > limity app-layer; rate-limit per-IP ogranicza czestotliwosc). vhost.conf.template bind-mountowany wersjonowo -> 'git pull && make up' aktywuje bez migracji. Retencja plikow tmp (wyczysc_zglos_tmp) przeniesiona do celery beat w repo bpp (lekki cyklik z rodzenstwem cleanup-*, portable z kodem) zamiast Ofelii. Co-Authored-By: Claude Opus 4.8 (1M context) --- defaults/webserver/vhost.conf.template | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/defaults/webserver/vhost.conf.template b/defaults/webserver/vhost.conf.template index a1730a3..58e0f2e 100644 --- a/defaults/webserver/vhost.conf.template +++ b/defaults/webserver/vhost.conf.template @@ -42,7 +42,19 @@ server { # Main HTTPS server block for ${VHOST_NAME} server { - client_max_body_size 100M; + # Twardy cap na rozmiar pojedynczego requestu = ostatnia bariera na krawedzi + # przed uploadem (defense-in-depth obok limitow app-layer z bpp#551: + # 5 plikow x 20 MiB + DATA_UPLOAD_MAX_NUMBER_FILES). UWAGA: legalny maks + # zgloszenia to 5 x 20 MiB = 104857600 B = DOKLADNIE 100 MiB samych plikow, + # a request niesie jeszcze narzut multipart (granice, naglowki per-part, + # pola formsetu autorow, CSRF) - przy dawnym `100M` (== 100 MiB) najwieksze + # POPRAWNE zgloszenie dostawalo 413 zanim dotarlo do Django. 120M daje ~20 + # MiB zapasu na narzut, nie oslabiajac istotnie bariery (i tak > od limitow + # app-layer, a rate-limit per-IP ogranicza czestotliwosc). Podniesienie capu + # nie psuje wiekszych uploadow innych endpointow (importy w /admin/) - moze + # je tylko przepuscic. Bind-mount wersjonowany -> `git pull && make up` + # aktywuje bez migracji. + client_max_body_size 120M; listen 443 ssl; listen 443 quic;