Server-hardening: versie-header onderdrukken + socket-timeout (docs/aanbeveling-productieserver.md) #41

Closed
opened 2026-08-19 16:06:38 +02:00 by jelmer · 1 comment
Owner

Naar aanleiding van een externe black-box review (zie docs/aanbeveling-productieserver.md). Van de vier bevindingen waren #3 (body-limiet) en #4 (exception-hygiëne) al opgelost sinds #32/#36. Deze issue dekt de resterende twee quick wins uit optie A:

  1. server_version/sys_version op Handler zodat de Server-header niet langer de exacte Python-versie lekt.
  2. timeout = 30 op Handler (socket-timeout) tegen een slowloris-achtige trage client die met maar een handvol reuseport-workers een worker kan gijzelen.

Bewust NIET gedaan: protocol_version op HTTP/1.1 zetten (stond ook in het document). _stream_check() (de NDJSON-voortgangsstream) stuurt geen Content-Length en leunt op verbinding-dicht om het einde te signaleren — HTTP/1.1 keep-alive zou die framing breken. De socket-timeout werkt onafhankelijk van protocol_version, dus dat is geen blocker voor deze twee wins.

Getest lokaal: Server-header bevestigd aangepast, normale en streaming /api/check blijven werken, volledige regressietest + test_gipod_verfijning.py + node --check groen.

Naar aanleiding van een externe black-box review (zie `docs/aanbeveling-productieserver.md`). Van de vier bevindingen waren #3 (body-limiet) en #4 (exception-hygiëne) al opgelost sinds #32/#36. Deze issue dekt de resterende twee quick wins uit optie A: 1. `server_version`/`sys_version` op `Handler` zodat de `Server`-header niet langer de exacte Python-versie lekt. 2. `timeout = 30` op `Handler` (socket-timeout) tegen een slowloris-achtige trage client die met maar een handvol reuseport-workers een worker kan gijzelen. **Bewust NIET gedaan:** `protocol_version` op `HTTP/1.1` zetten (stond ook in het document). `_stream_check()` (de NDJSON-voortgangsstream) stuurt geen `Content-Length` en leunt op verbinding-dicht om het einde te signaleren — HTTP/1.1 keep-alive zou die framing breken. De socket-timeout werkt onafhankelijk van `protocol_version`, dus dat is geen blocker voor deze twee wins. Getest lokaal: `Server`-header bevestigd aangepast, normale en streaming `/api/check` blijven werken, volledige regressietest + `test_gipod_verfijning.py` + `node --check` groen.
Author
Owner

Gedeployed in ff1108e, live geverifieerd: Server-header toont nu alleen omleidingchecker (geen Python-versie meer), en /api/check werkt gewoon door op productie.

Gedeployed in ff1108e, live geverifieerd: `Server`-header toont nu alleen `omleidingchecker` (geen Python-versie meer), en /api/check werkt gewoon door op productie.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jelmer/gpx-afsluitingen#41
No description provided.