Express 5.3.0 schließt ein offenes Größenlimit und ändert drei Antwort-Header
Express 5.3.0 erschien am 9. Oktober. Der größte Teil des Werts steckt in aktualisierten Abhängigkeiten — fünf CVEs in drei Paketen —, doch das Release ändert auch drei Antwort-Header so, dass Tests mit exakten Bytevergleichen anschlagen.
Zuerst ansehen: ein Größenlimit, das sich selbst abschaltete. Mit body-parser 2.3.0 kommt der Fix für CVE-2026-12590 (GHSA-v422-hmwv-36x6). Bekam die Option limit eines Body-Parsers einen Wert, den die Bibliothek nicht verstand, wurde die Prüfung der Body-Größe stillschweigend abgeschaltet statt den Wert abzulehnen. Ein Client konnte so beliebig große Payloads schicken. Ab diesem Release wirft ein ungültiges limit schon beim Erzeugen des Parsers. Eine Anwendung mit so einem Tippfehler startet also nicht mehr — und genau das ist gewollt, denn geschützt hat die Konfiguration nie.
Zwei weitere Fixes in Abhängigkeiten: qs springt auf ^6.16.0 und behebt CVE-2026-2391, CVE-2026-82417 und CVE-2026-82562 — Umgehungen von arrayLimit beim Komma-Parsing und eine Dienstverweigerung über ein vom Angreifer gesteuertes isBuffer. proxy-addr geht auf ^2.0.8 wegen CVE-2026-90711; die Release Notes nennen dazu nur die Kennung.

Header-Änderungen, die Tests brechen können. res.send() setzt kein Content-Length mehr, wenn bereits ein Transfer-Encoding-Header existiert — beide sollen laut HTTP nicht gemeinsam auftreten; die ETag-Berechnung bleibt gleich. Mit content-type 2.0 behält res.send() vorhandene Parameter beim Anhängen des Zeichensatzes: aus text/plain; foo=bar wird text/plain; foo=bar; charset=utf-8; ein nicht parsbarer Content-Type führt nicht mehr zu einer Ausnahme. Das Release nennt etwa 1,5-fach schnelleres Parsen und Formatieren. Und content-disposition 2.0 setzt Dateinamen, die gültige HTTP-Tokens sind, nicht mehr in Anführungszeichen: res.attachment('user.html') liefert filename=user.html statt filename="user.html". Für RFC 6266 ist das gleichwertig, für Snapshot-Tests nicht.
Kleinere Verhaltensänderungen. req.fresh berücksichtigt jetzt die Methode QUERY; eine QUERY-Antwort mit passendem If-None-Match kann also 304 liefern — die Release Notes beschreiben QUERY als sicher, idempotent und cachebar. Der Standard-Fehlerhandler protokolliert das ganze Fehlerobjekt statt nur den Stack, sodass Error.cause und bibliotheksspezifische Felder nicht mehr verloren gehen. app.render(view, null, cb) verhält sich wie ohne Optionen, und die HTML-Antwort von res.redirect() bekommt Doctype, Titel und Body.
Was tun. Aktualisieren und im Code nach limit: in Body-Parser-Optionen suchen: jeden Wert mit der Dokumentation von body-parser abgleichen — ein ungültiger verhindert ab jetzt den Start. Wer Content-Type- oder Content-Disposition-Strings byteweise vergleicht, sollte mit Abweichungen rechnen und vor dem Aktualisieren der Snapshots entscheiden, ob sie eine Rolle spielen.
Quelle: Release Notes zu Express v5.3.0, 9. Oktober 2026 — https://github.com/expressjs/express/releases/tag/v5.3.0 ; Advisory zu body-parser — https://github.com/expressjs/body-parser/security/advisories/GHSA-v422-hmwv-36x6