Express 5.3.0 منتشر شد
خلاصهٔ کاملتر
تیم Express نسخهٔ 5.3.0 رو منتشر کرده. بخش مهمش امنیتیه: qs (یعنی کتابخونهای که query string رو پارس میکنه) به ^6.16.0 رفته و CVE-2026-2391، CVE-2026-82417 و CVE-2026-82562 رو میبنده. این باگها به مهاجم اجازه میدادن محدودیت arrayLimit رو موقع پارس کردن مقدارهای کامادار دور بزنه، یا با یه isBuffer دستکاریشده سرور رو از کار بندازه. proxy-addr هم برای CVE-2026-90711 به ^2.0.8 رسیده.
body-parser هم به ^2.3.0 رفته تا CVE-2026-12590 بسته بشه. مشکل این بود که اگه گزینهٔ limit مقدار نامعتبری داشت، محدودیت حجم بدنهٔ درخواست بیصدا خاموش میشد. یعنی هر کسی میتونست payload خیلی بزرگ بفرسته و سرور رو از پا دربیاره. حالا مقدار نامعتبر همون اول موقع ساختن parser خطا میده.
یه باگ قدیمی توی res.send() هم درست شده. قبلاً ممکن بود هم Content-Length و هم Transfer-Encoding با هم توی پاسخ بیان، در حالی که طبق استاندارد HTTP این دوتا نباید کنار هم باشن. حالا Content-Length فقط وقتی اضافه میشه که Transfer-Encoding نباشه و ساختن ETag هم دست نخورده میمونه.
از بهبودها، req.fresh حالا درخواستهای QUERY رو هم بررسی میکنه. QUERY یه متد HTTP امن و قابل کش هست که مثل GET داده میخونه ولی بدنه هم داره. قبلاً این درخواستها هیچوقت 304 نمیگرفتن، حتی وقتی ETag یکی بود:
// QUERY /reports with If-None-Match: "12345"
app.query('/reports', (req, res) => {
res.set('ETag', '"12345"');
res.send(results); // now responds 304 Not Modified
});چندتا تغییر رفتاری هم هست که باید حواست بهشون باشه. content-type به ^2.0.0 رفته که پارس هدر رو حدود 1.5 برابر سریعتر میکنه، ولی res.send() حالا پارامترهای قبلی هدر رو نگه میداره و روی هدر خراب دیگه خطا نمیده. content-disposition هم به ^2.0.1 رسیده و اسم فایلهایی که توکن معتبر HTTP هستن دیگه توی کوتیشن نمیان. طبق RFC 6266 این دوتا معادلن، ولی اگه تستی داری که بایتبهبایت هدر رو چک میکنه، باید آپدیتش کنی.
Error handler پیشفرض هم حالا کل شیء خطا رو لاگ میکنه، نه فقط stack trace رو. یعنی جزئیاتی مثل Error.cause یا پراپرتیهای مخصوص کتابخونهها (مثلاً parent توی Sequelize) دیگه گم نمیشن. صدا زدن app.render با options برابر null هم دیگه خطا نمیده. HTMLی هم که Express موقع فرستادن کاربر به یه آدرس دیگه برمیگردونه حالا ساختار کاملتری داره.
نکات کلیدی:
- qs به ^6.16.0 رفته و سه CVE شامل CVE-2026-2391 رو میبنده.
- body-parser نسخهٔ ^2.3.0 جلوی خاموش شدن بیصدای محدودیت حجم بدنه (CVE-2026-12590) رو میگیره.
- proxy-addr برای CVE-2026-90711 به ^2.0.8 آپدیت شده.
- res.send() دیگه Content-Length و Transfer-Encoding رو با هم نمیفرسته.
- درخواستهای QUERY حالا میتونن جواب 304 Not Modified بگیرن.
- content-disposition نسخهٔ ^2.0.1 اسم فایلهای ساده رو بدون کوتیشن میفرسته.




